Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Angular 2 templates methods vs getters

I'm wondering if there is any benefit to do this:

  <div>{{getSomething()}}</div>    export class MyComp {     getSomething() { return ...}   } 

Over this:

 <div>{{getSomething}}</div>   export class MyComp {    get getSomething() { return ...}  } 

Use methods vs getters to display calculated data.

like image 298
ng2user Avatar asked Apr 02 '17 09:04

ng2user


People also ask

When to use getter vs method?

Using a getter, we can perform an action (some process) and/or dress up the return by containing not just the polled value, but other data associated with the attribute or value. Again, without a getter, we would need a method to evaluate the conditional(s) and return it.

Why do we use getters and setters in angular?

Getters and Setters are well-known design patterns in almost all programming languages. They let you create amazingly advanced computations on your normal variables. They can be used to perform preprocessing on your data. Every variable in TypeScript can have its setter and getter functions.

Does a getter have a return type?

Getters and setters are used to protect your data, particularly when creating classes. For each instance variable, a getter method returns its value while a setter method sets or updates its value.


1 Answers

I looked deeper into this and played with typescript Playground. I declared two classes one with getter and the second with get method as described in your questions.

Lets see how it looks like:

In the first example we declared a method for getting the property value in the following way:

class Greeter {   greeting: string;   constructor(message: string) {       this.greeting = message;   }    getGreeting() {       return this.greeting;   } } 

Which after translation to javascript it looks like:

var Greeter = (function () {    function Greeter(message) {        this.greeting = message;    }    Greeter.prototype.getGreeting = function () {        return this.greeting;    };    return Greeter; }()); 

And regarding the second example where we declared a getter in the following way:

class GetterGreeter {    _greeting: string;    constructor(message: string) {        this._greeting = message;    }     get greeting() {        return this._greeting;    } } 

Which after translation looks like:

var GetterGreeter = (function () {    function GetterGreeter(message) {        this._greeting = message;    }    Object.defineProperty(GetterGreeter.prototype, "greeting", {        get: function () {            return this._greeting;        },        enumerable: true,        configurable: true    });    return GetterGreeter; }()); 

(You can play with the declaration and the translation to javascript here)

As you can see with get method (as in your first example) the method is declared on the prototype and in your second example using the getter pattern typescript uses the defineProperty api.

In both cases we are invoking a method and angular will also call a method during its change detection to identify changes and re-render.

As I see it this is only a syntactic sugar for the same approach and I don't see any performance benefit for one of the methods.

like image 110
galvan Avatar answered Sep 22 '22 09:09

galvan