2017-08-25 1 views
0

Ich könnte dies überdenken und deshalb bin ich hier. :)

Hinweis: Im folgenden Beispiel ist das Objekt "ctrl" der Controller-Alias ​​der Komponente. var ctrl = dies;

Lassen Sie uns sagen, dass wir eine Komponente haben, die zwei Bindungen hat, wo man optional ist:

bindings: { 
    params: '<', 
    company: '<?' 
} 

Manchmal ist das Unternehmen zur Verfügung steht, ist es manchmal nicht.

Die $ onChanges sieht ungefähr so ​​aus:

ctrl.$onChanges = function(changes) { 
    if (changes.params || changes.company) { 
     console.log('executed'); 
    } 
} 

Es scheint, dass, wenn beide Bindungen aktualisiert werden, $ onChanges zweimal ausgeführt wird. Beim ersten Mal ist ctrl.company (die Bindung) in der Komponente null, obwohl ich tatsächlich diese Bindung mit einem Wert aktualisiert habe. Beim zweiten Mal hat ctrl.company seinen Wert.

Jetzt verstehe ich, dass die OR-Operation möglicherweise nicht korrekt ist. Ich bin nur ein wenig unsicher, wie $ onChanges funktioniert.

Ich werde aktualisieren, wenn meine Beschreibung des Problems unklar ist.

Vielen Dank im Voraus.

Antwort

1

From Angular code:

$onChanges(changesObj) - aufgerufen, wenn Einweg (<) oder Interpolation (@) Bindungen aktualisiert werden. Die * changesObj ist ein Hash, dessen Schlüssel die Namen der gebundenen Eigenschaften sind, die geändert wurden, und die Werte sind ein * -Objekt der Form { currentValue, previousValue, isFirstChange() }. Verwenden Sie diesen Hook, um Aktualisierungen innerhalb einer * Komponente auszulösen, z. B. durch Klonen des gebundenen Werts, um eine versehentliche Mutation des äußeren Werts zu verhindern.

Also aus meiner Sicht haben Sie 2 bind Artikel: params und company, die zweimal zu $onChanges auslösen können.

Wenn Sie einmal schreiben wollen sich einzuloggen, würde ich schreiben &&:

if (changes.params && changes.company) { 
    console.log('executed'); 
} 
Verwandte Themen