Wie gehen Sie mit asynchronen Eingaben in Komponenten um?

8

Ich habe ein Problem mit ngOnChange . Ich habe folgende Komponente:

%Vor%

Wenn jedoch Bedingung nur einmal überprüft wird - wenn this.users noch nicht vom Server abgerufen wurde und daher seine Länge 0 ist. Wie kann ich eine Lösung finden, um mit dieser Art von asynchronen Eingaben umzugehen?

Das Array wird aktualisiert, wenn ich die folgenden Protokolle einstelle:

%Vor%

Die Konsolenausgabe ist:

%Vor%     
uksz 14.03.2016, 15:00
quelle

2 Antworten

7

Wenn Sie keine Logik ausführen müssen, wenn sich Ihre Eingabeeigenschaft ändert (z. B. wenn Sie nur die Eigenschaft in Vorlagenbindungen verwenden), müssen Sie nichts tun. Angular wird neue Werte automatisch von der übergeordneten zur Eingabeeigenschaft weiterleiten.

Wenn Sie eine Komponentenlogik ausführen möchten, wenn sich die Eingabeeigenschaft ändert, verwenden Sie ngOnChanges() , das aufgerufen wird, wenn sich eine Komponenteneingabeeigenschaft ändert.

Da Angular% === verwendet, um Änderungen zu erkennen (na ja, es gibt auch eine spezielle Behandlung für NaN ), bedeutet dies, dass

  • Für Referenztypen (Array, Objekt, Datum usw.) muss sich die Referenz (d. h. die Referenz des Arrays, des Objekts usw.) ändern. Z. B. myArray = someNewArray;
    Wenn sich nur ein Element im Array ändert, wird ngOnChanges() nicht aufgerufen. Z. B. wird für eine Änderung wie myArray[0].name = newName; , ngOnChanges() nicht aufgerufen.
  • für primitive Typen (number, boolean, string) bedeutet dies einfach, dass sich der Wert ändern muss. ZB myNumber = 5; oder myNumber = newNumber ;

Eine weitere Möglichkeit besteht darin, Ihre eigene Change Detection-Logik mit ngDoCheck() zu implementieren. Siehe diese Antwort für ein Beispiel. Dieser Lebenszyklus-Hook wird "jedes Mal aufgerufen, wenn die Eingabeeigenschaften einer Komponente oder einer Direktive überprüft werden. Verwenden Sie sie, um die Änderungserkennung durch eine benutzerdefinierte Überprüfung zu erweitern" - von lifecyle hooks.md

    
Mark Rajcok 14.03.2016, 15:31
quelle
0

ngOnChanges() wird aufgerufen, wenn users aktualisiert wird. Sie müssen nur sicherstellen, dass ein neues Array users in der übergeordneten Komponente zugewiesen wird, anstatt ein vorhandenes Array zu füllen. Andernfalls erkennt die Änderung der Winkeländerung die Änderung nicht.

    
Günter Zöchbauer 14.03.2016 15:03
quelle

Tags und Links