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


93

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

可以在简单表达式前面加上::,告诉angular在首次评估表达式后停止观看。给出的常见示例如下所示:

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

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

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

有关详细说明,请参阅angular文档:docs.angularjs.org/guide/expression#one-time-binding
Akshay Gundewar

Answers:


160

是。您可以为每个表达式加上::,甚至是ngIf或中的前缀ngClass

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

实际上,代码只是检查表达式中的前两个字符是:为了激活一次性绑定(然后将其删除,因此甚至不需要括号)。其他一切保持不变。


3
它回答了我的问题,尽管某些新功能无法正常工作:<div ng-if="::user.isSomething"></div>并且<div ng-if="::(!user.isSomething)"></div>都可以渲染。它不带“ ::”就可以工作。
2014年

@seldary我无法重现该问题。::如我的编辑中所述,每个带前缀的表达式对我来说都很有效。如有疑问,您可以摆弄琴吗?
黑洞2014年

7
最初,对于ngClass定义了多个类,它似乎也不适合我。我很快发现绑定仍然是绑定的,因为尚未定义ngClass中使用的某些监视变量(并且我们知道angular将在释放监视程序之前先等待值被定义)。这是一个小提琴,以演示此行为jsfiddle.net/2LkyLoop
Denis Pshenov 2015年

1
@MaxRocket bindonce语法已在angular 1.3中添加。所以它不会在1.2工作或降低
BERTY

2
ng-if的一次性绑定似乎不起作用。有或没有观看者的人数很高::。它对于ng-class效果很好,但是ng-if似乎对我而言没有服从一次性绑定(1.5.6)。请注意,我试图单向绑定来自ng-repeat的对象属性。不知道这是否有所作为。
AgmLauncher '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.