表达式的角度懒惰一次性绑定

sel*_*ary 93 javascript binding lazy-evaluation angularjs

自1.3.0-beta.10版本以来,AngularJS有一个新功能:"懒惰的一次性绑定".

简单的表达式可以作为前缀::,告诉角度在首次评估表达式后停止观看.给出的常见示例如下:

<div>{{::user.name}}</div>
Run Code Online (Sandbox Code Playgroud)

是否有类似以下表达式的语法?

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

Bla*_*ole 160

是.您可以为每个表达式添加前缀::,甚至是:ngIf或者ngClass:

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

实际上,代码只是检查表达式中的两个第一个字符是:为了激活一次性绑定(然后删除它们,因此甚至不需要括号).其他一切都是一样的.

  • 起初它似乎对我不起作用,ngClass定义了多个类.我很快发现绑定仍然绑定,因为ngClass中使用的一些观察变量尚未定义(我们知道在释放观察者之前,angular会等待值先定义).这里有一个小小的小提示来演示这种行为http://jsfiddle.net/2LkyLoop/. (7认同)
  • 它回答了我的问题,虽然一些新功能不能很好地工作:`<div ng-if =":: user.isSomething"> </ div>`和`<div ng-if ="::(! user.isSomething)"> </ div>`两个渲染.它没有"::". (3认同)
  • ng-if的一次性绑定似乎不起作用.无论是否有`::`,观察者数都很高.它适用于ng-class,但ng-if似乎不服从我的一次性绑定(1.5.6).请注意,我正在尝试单向绑定来自ng-repeat的对象属性.不确定这是否有所作为. (2认同)