2016-07-19 4 views
2

Einer meiner Kollegen in der Arbeit zeigen mir ein wirklich seltsames Verhalten der einmaligen Bindung in eckigen.Ist es richtig, dass eine einmalige Bindung die Variable neu bewertet, wenn sie mit der Anweisung ngIf kombiniert wird? - AngularJS

UseCase:

Wenn Sie ein Element, das Text von diesen einmaligen Bindung innerhalb Blockes ist verbindlich, die bedingt ist durch ng-wenn, dann, wenn wir diesen Wert zu ändern, Fügen Sie zum Beispiel einige Buchstaben hinzu und ändern Sie später die Bedingung von ng-if, und danach wurde der Wert der einmaligen Bindung aktualisiert.

HTML:

<div ng-if="a" class="blue">{{ ::text }}</div> 

Es ist eine Art von Fehler, oder erwartete Verhalten? Hier

ist ein Beispiel von dem, was ich tue: http://codepen.io/samot/pen/rLJAdN

+0

Als Antwort @jjmotes bewerten Sie den Ausdruck –

Antwort

6

Ist die Bedingung der ng-if wird falsch und dann wahr, es seinen Inhalt neu erstellt werden, so dass die einmaligen ng-bind Richtlinie bewertet werden nochmal.

Die einzige Sache, die einmal bindet, ist zu vermeiden, eine Uhr auf Ihrem Ausdruck zu addieren, aber es "speichert" nicht das Ergebnis für den Fall, dass der Inhalt einer Direktive wieder kompiliert wird.

So ist es erwartet Verhalten.

+0

Ja, ich weiß das, aber es gibt eine Art von Bug oder erwartetes Verhalten? – Samot

+0

Es wird erwartet, Verhalten. Stellen Sie sich vor, Ihr Inhalt ist in ng-repeat mit einer Liste. Wenn sich die Liste ändert und Zeilen erstellt oder neu erstellt werden, werden sie erneut ausgewertet, selbst wenn es sich bei den Ausdrücken um einmalige Bindungen handelt. – jjmontes

+0

Wenn Sie "ng-show" anstelle von "ng-if" verwenden, ändert sich der Wert nicht, da der Inhalt dieses Mal nur die Sichtbarkeit ändert und nicht neu erstellt wird. – Aaron

1

Funktioniert wie erwartet, da ngIf Direktive der Code vollständig neu kompiliert wird. Wenn Sie ngShow verwenden, ändert sich das Verhalten und der Code verhält sich so, wie Sie es von ngIf erwarten. Dies liegt daran, dass der Code only hidden and not recompiled ist, was nicht die (erste) Neubewertung der Variablen verursacht.

Verwandte Themen