AngularJS hat seit der Version 1.3.0-beta.10 eine neue Funktion: die "faule einmalige Bindung" .
Einfachen Ausdrücken kann ein Präfix vorangestellt werden ::
, das Angular anweist, die Beobachtung zu beenden, nachdem der Ausdruck zum ersten Mal ausgewertet wurde. Das übliche Beispiel ist so etwas wie:
<div>{{::user.name}}</div>
Gibt es eine ähnliche Syntax für Ausdrücke wie die folgenden?
<div ng-if="user.isSomething && user.isSomethingElse"></div>
<div ng-class="{classNameFoo: user.isSomething}"></div>
Antworten:
Ja. Sie können jedem Ausdruck einen Präfix voranstellen
::
, auch den inngIf
oderngClass
:Tatsächlich überprüft der Code einfach, ob die beiden ersten Zeichen im Ausdruck vorhanden sind
:
, um die einmalige Bindung zu aktivieren (und entfernt sie dann, sodass die Klammern nicht einmal benötigt werden). Alles andere bleibt gleich.quelle
<div ng-if="::user.isSomething"></div>
und<div ng-if="::(!user.isSomething)"></div>
beide rendern. Es funktioniert ohne das "::".::
funktionieren gut für mich, wie in meiner Bearbeitung erläutert. Können Sie im Zweifelsfall eine Geige spielen?::
. Es funktioniert gut für die ng-Klasse, aber ng-if scheint für mich nicht der einmaligen Bindung zu gehorchen (1.5.6). Beachten Sie, dass ich versuche, eine Objekteigenschaft, die aus einer ng-Wiederholung stammt, in eine Richtung zu binden. Ich bin mir nicht sicher, ob das einen Unterschied macht.