Angular 2: Wie erkenne ich Attributänderungen an Eingabeattributen einer Komponente?

8

Ich habe einen Angular 2 Controller, der so aussieht:

%Vor%

Aber wenn sich der Wert von value von einer Vorlagenbindung ändert:

%Vor%

Das valueChange -Ereignis wird nicht ausgelöst. Obwohl die Vorlage korrekt aktualisiert wird und den neuen Wert anzeigt, weiß die Komponente nicht, dass sie geändert wurde.

Wie kann ich feststellen, wenn die Eingabeattribute auf meinem Controller geändert werden?

    
David Wolever 08.08.2016, 01:19
quelle

3 Antworten

12

Meiner Meinung nach ist Output dafür verantwortlich, dass Ihre Komponente ein Ereignis an andere ausstrahlt, damit sie ihre Ansicht bei Bedarf aktualisieren. Sie sollte nur für Änderungen verwendet werden, die intern gesendet werden (daher der Name Output ). ). Das Auslösen eines Output -Ereignisses bei Input -Änderungen kann zu unerwartetem Verhalten führen (wie jetzt, da valueChange für alle internen und externen Änderungen und nicht wirklich für Output ausgelöst wird).

In deinem Fall, wenn du Sachen machen willst, wenn sich dein value ändert, kannst du es zu einem Setter machen:

%Vor%     
Harry Ninh 08.08.2016 02:01
quelle
7

Ich habe Setter verwendet, um zu erkennen, wenn Eingangsvariablen geändert wurden. Sie müssen den Schlüssel inputs im @Component decorator anstelle der @Input -Deklaration verwenden, um dies wie folgt zu aktivieren:

%Vor%

Auch FYI, die Klassenmethode ist ngOnInit anstelle von onInit .

    
Joey Robert 08.08.2016 15:18
quelle
2

Ich konnte das Problem umgehen, indem ich from OnChanges :

implementiere %Vor%

Dies löst automatisch das Ereignis Change aus, wenn Angular eine Änderung erkennt ... aber gibt es eine Möglichkeit, dies nativ zu tun?

    
David Wolever 08.08.2016 01:31
quelle

Tags und Links