AngularJS ma nową funkcję od wersji 1.3.0-beta.10: „leniwe jednorazowe wiązanie” .
Proste wyrażenia mogą być poprzedzone prefiksem ::
, informując Angulara, aby przestał obserwować po pierwszym oszacowaniu wyrażenia. Typowy podany przykład to:
<div>{{::user.name}}</div>
Czy istnieje podobna składnia dla wyrażeń, takich jak poniższe?
<div ng-if="user.isSomething && user.isSomethingElse"></div>
<div ng-class="{classNameFoo: user.isSomething}"></div>
javascript
angularjs
binding
lazy-evaluation
seldary
źródło
źródło
Odpowiedzi:
Tak. Możesz poprzedzić wszystkie wyrażenia
::
, nawet te zngIf
lubngClass
:<div ng-if="::(user.isSomething && user.isSomethingElse)"></div> <div ng-class="::{classNameFoo: user.isSomething}"></div>
W rzeczywistości kod po prostu sprawdza, czy dwa pierwsze znaki w wyrażeniu służą
:
do aktywacji jednorazowego powiązania (a następnie je usuwa, dzięki czemu nawiasy nie są nawet potrzebne). Cała reszta pozostaje taka sama.źródło
<div ng-if="::user.isSomething"></div>
i<div ng-if="::(!user.isSomething)"></div>
obie renderują. Działa bez „::”.::
działają dobrze, jak wyjaśniono w mojej edycji. Czy potrafisz zagrać na skrzypcach, jeśli masz wątpliwości?::
. Działa dobrze w przypadku klasy ng, ale wydaje się, że ng-if nie jest dla mnie jednorazowym obowiązkiem (1.5.6). Zwróć uwagę, że próbuję jednokierunkowo powiązać właściwość obiektu pochodzącą z powtórzenia ng. Nie jestem pewien, czy to robi różnicę.