Warum angular 2 ngOnChanges reagiert nicht auf Eingabe-Array-Push

9

Meine eckige Anwendung blieb bei einem Problem hängen, ich benutzte die Eingabe als Array und drückte einen Wert auf das Array, wenn das Klickereignis auftrat. Aber die ngOnChanges feuern nicht, wenn der Array-Push ausgeführt wird. Gibt es eine Möglichkeit zum Auslösen von ngOnChange

?

Mein Code ist ts Datei ist

%Vor%

Mein Auswahltag

%Vor%

Klicken Sie auf Ereigniscode

%Vor%     
Manush 05.04.2017, 06:37
quelle

3 Antworten

15

Die Erkennung von Winkeländerungen überprüft nur die Objektidentität, nicht den Objektinhalt. Einfügungen oder Entfernungen werden daher nicht erkannt.

Sie können das Array nach jedem Update kopieren

%Vor%

oder verwenden Sie IterableDiffer , um nach Änderungen in InputComponent in ngDoCheck wie NgFor zu suchen.

    
Günter Zöchbauer 05.04.2017, 06:43
quelle
3

@ GünterZöchbauer's Antwort ist völlig richtig. Ich möchte jedoch eine Alternative / Ergänzung zum Kopieren des gesamten Arrays hinzufügen. Verwenden Sie das gleiche Beispiel aus der Frage.

%Vor%

wurde zu

geändert %Vor%

Die Länge hier entspricht der Funktion * ngFor trackBy für die Komponente. Damit treten die ngOnChanges mit Inhaltslängenänderungen auf.

Bei Verwendung in Verbindung mit der Methode * ngFor trackBy sollte die Leistung verbessert werden, da die gebundenen Vorlagen des gesamten Arrays nicht neu berechnet werden (kein Bildschirm- / Inhaltsflackern).

    
JerradPatch 31.05.2017 20:56
quelle
0

Wenn Sie Ihr metaIds-Array neu zuweisen, wird das ngOnChanges-Lifecycle-Ereignis ausgelöst. Sie können Ihr Array in ein neues Array dekonstruieren.

%Vor%     
KyleGill 12.07.2017 19:59
quelle