Jaka jest różnica pomiędzy:
{{::office.name}}
i
{{office.name}}
w angularJS?
Odpowiedzi:
Wyrażenie zaczynające się od
::
jest traktowane jako wyrażenie jednorazowe. Wyrażenia jednorazowe przestaną się ponownie obliczać, gdy staną się stabilne, co ma miejsce po pierwszym podsumowaniu, jeśli wynik wyrażenia jest wartością nieokreśloną (patrz algorytm stabilizacji wartości poniżej).
W wielu sytuacjach wartości muszą być wyświetlane tylko w widoku i nigdy nie będą aktualizowane z widoku lub kontrolera. Jeśli jednak używane jest wiązanie dwukierunkowe, $digest
sprawdzi wszelkie zmiany w wyrażeniu w każdym cyklu, co nie jest konieczne. W takich przypadkach ::
należy użyć przed wyrażeniem. Jak stwierdzono w powyższym oświadczeniu, jest to bardziej wydajne niż dwukierunkowa składnia wiążąca w takich przypadkach.
Blog: Składnia jednorazowego wiązania AngularJS z @Todd Motto
W łupinie orzecha, gdy zadeklarujemy wartość, taką jak
{{ ::foo }}
wewnątrz DOM, po zdefiniowaniu tej wartości, Angular wyrenderuje ją, usunie wiązanie z obserwatorów, a tym samym zmniejszy głośność powiązań wewnątrz$digest
pętli. Prosty!