Angular 2 Vorlagen Methoden vs Getter

8

Ich frage mich, ob es einen Vorteil dafür gibt:

%Vor%

Darüber hinaus:

%Vor%

Verwenden Sie Methoden vs. Getter, um berechnete Daten anzuzeigen.

    
ng2user 02.04.2017, 09:32
quelle

3 Antworten

11

Ich habe mir das näher angeschaut und mit Typescript Playground gespielt. Ich habe zwei Klassen mit Getter und die zweite mit Get-Methode wie in Ihren Fragen beschrieben erklärt.

Sehen wir, wie es aussieht:

Im ersten Beispiel haben wir eine Methode zum Abrufen des Eigenschaftswerts auf folgende Weise deklariert:

%Vor%

Nach der Übersetzung in Javascript sieht es so aus:

%Vor%

Und bezüglich des zweiten Beispiels, wo wir einen Getter auf die folgende Weise deklariert haben:

%Vor%

Was nach der Übersetzung aussieht:

%Vor%

(Sie können mit der Deklaration und der Übersetzung zu JavaScript spielen hier )

Wie Sie mit der get-Methode (wie im ersten Beispiel) sehen können, wird die Methode im Prototyp deklariert und im zweiten Beispiel verwendet das Getter-Muster typescript die defineProperty api.

In beiden Fällen rufen wir eine Methode auf und angular ruft während der Änderungserkennung auch eine Methode auf, um Änderungen zu identifizieren und erneut zu rendern.

Wie ich es sehe, ist dies nur ein syntaktischer Zucker für den gleichen Ansatz und ich sehe keinen Leistungsvorteil für eine der Methoden.

    
galvan 02.04.2017, 09:50
quelle
6

Wenn Sie ein Getter oder eine Methode sind, spielt es aus technischer Sicht keine Rolle.

Einige verwenden die Konvention, dass ein Getter sich ähnlich wie ein Feld verhalten soll und keine teure Berechnung, während eine Methode verwendet werden sollte, wenn die Berechnung mehr als einige sehr einfache Dinge wie zum Beispiel das Erstellen eines vollständigen Namens von First-Middle ist - und Nachname.

Ich denke, es ist eine gute Methode, diese Unterscheidung für Angular zu treffen, da für die Ansichtsbindung eine teure Berechnung vermieden werden sollte, da die Methode oder der Getter sehr oft aufgerufen werden kann. In einem solchen Fall ist es besser, das Ergebnis in einem Feld zu speichern und stattdessen an das Feld zu binden.

Sehr wichtig bei der Ansichtsbindung ist, dass die Methode oder der Getter bei nachfolgenden Aufrufen keine anderen Werte zurückgibt, wenn keine Abhängigkeiten geändert wurden (wie return {}; , die als neue Objektinstanz behandelt werden und einen Fehler wie "Ausdruck" verursachen hat sich seit der letzten Überprüfung geändert. ")

    
Günter Zöchbauer 02.04.2017 10:01
quelle
2

Der Unterschied besteht darin, dass Sie im ersten Fall eine Funktion im Ausdruck verwenden, im zweiten Fall jedoch keine Funktion. Sie können also nicht

verwenden %Vor%

Die Vorteile der zweiten Methode bestehen darin, die Kapselung der Eigenschaft innerhalb der Klasse zu verwenden, und Sie müssen darauf außerhalb der Klasse zugreifen.

Getter und Setter sind Teil der ES5-Spezifikation. Sie können über Getter und setter .

    
Roman C 02.04.2017 09:50
quelle