Angular lazy one-time binding for expressions

JavascriptAngularjsBindingLazy Evaluation

Javascript Problem Overview


AngularJS has a new feature since the version 1.3.0-beta.10: the "lazy one-time binding".

Simple expressions can be prefixed with ::, telling angular to stop watching after the expression was first evaluated. The common example given is something like:

<div>{{::user.name}}</div>

Is there a similar syntax for expressions like the following ones?

<div ng-if="user.isSomething && user.isSomethingElse"></div>
<div ng-class="{classNameFoo: user.isSomething}"></div>

Javascript Solutions


Solution 1 - Javascript

Yes. You can prefix every expressions with ::, even the ones in ngIf or ngClass:

<div ng-if="::(user.isSomething && user.isSomethingElse)"></div>
<div ng-class="::{classNameFoo: user.isSomething}"></div>

Actually, the code simply checks that the two first characters in the expression are : in order to activate the one-time binding (and then removes them, thus the parenthesis aren't even needed). Everything else remains the same.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionseldaryView Question on Stackoverflow
Solution 1 - JavascriptBlackholeView Answer on Stackoverflow