Angular 2: Wie binden Sie die Eingabe an die Modelleigenschaft mit Getter- und Setter-Methoden?

8

Ich mache eine Angular 2 Web App. Ich habe ein Modell, das aus einigen Schlüsseleigenschaften besteht, und dann einigen anderen Eigenschaften, die basierend auf diesen Schlüsselwerten berechnet werden.

Alle meine Eigenschaften haben Getter-Methoden. Um meine berechneten Eigenschaften mit meinen Schlüsseleigenschaften synchron zu halten, werden die Schlüsseleigenschaften über Setter-Methoden geändert, die alle berechneten Eigenschaften neu bewerten. Hier ist ein vereinfachtes Beispiel:

%Vor%

Dadurch bleibt mein Modell konsistent: Jedes Mal, wenn eine der Schlüsseleigenschaften geändert wird, werden alle berechneten Eigenschaften neu berechnet.

Jetzt muss ich herausfinden, wie ich meine Eigenschaften an meine Komponentenansichten binden kann. Es scheint, als könnte ich die berechneten Eigenschaften-Getter mit Interpolation darstellen:

%Vor%

Ich bin mir jedoch nicht sicher, wie ich meine Schlüsseleigenschaften am besten an Eingabefelder binden könnte. Alle Beispiele für die Verwendung einer bidirektionalen Bindung scheinen ngModel wie folgt zu verwenden:

%Vor%

Dies scheint jedoch auf die Bindung an einfache Eigenschaften ausgerichtet zu sein. Ich brauche idealerweise bidirektionale Bindung mit meinen separaten Getter- und Setter-Methoden (getKeyValue und setKeyValue).

Gibt es einen eingebauten Weg, um dies in Angular 2 zu erreichen?

    
MWinstead 31.10.2016, 11:54
quelle

2 Antworten

14

Sie müssen dieses längere Formular verwenden

%Vor%

Sie sollten wissen, dass die Methoden getXxx () jedes Mal aufgerufen werden, wenn die Änderungserkennung ausgeführt wird, was sehr häufig sein kann. Stellen Sie sicher, dass die Getter denselben Wert zurückgeben (insbesondere für Objekte derselben Instanz), und stellen Sie sicher, dass die Getter keine Nebenwirkungen haben. Andernfalls erhalten Sie die Fehlermeldung "Ausdruck wurde geändert, seit es zuletzt überprüft wurde ...".

    
Günter Zöchbauer 31.10.2016, 11:58
quelle
0

nicht sicher, welche Version von Angular oben verwendet wird, aber die Version, die ich verwende (v4.3.5), erlaubt die direkte Bindung an die Getter / Setter-Methoden eines Feldes mit ngModel: in der Typoskript-Datei:

%Vor%

und in der Vorlagendatei

%Vor%     
Daryl1976 20.09.2017 19:19
quelle

Tags und Links