【问题标题】:Angular lazy one-time binding for expressions表达式的 Angular 惰性一次性绑定
【发布时间】:2014-07-21 02:50:30
【问题描述】:

AngularJS 从 1.3.0-beta.10 版本开始有了一个新特性:"lazy one-time binding"

简单的表达式可以以::为前缀,告诉angular在表达式第一次被评估后停止观察。给出的常见示例如下:

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

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

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

【问题讨论】:

标签: javascript angularjs binding lazy-evaluation


【解决方案1】:

是的。您可以为每个表达式加上 :: 前缀,即使是 ngIfngClass 中的表达式:

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

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

【讨论】:

  • 它回答了我的问题,尽管一些新功能不能很好地工作:&lt;div ng-if="::user.isSomething"&gt;&lt;/div&gt;&lt;div ng-if="::(!user.isSomething)"&gt;&lt;/div&gt; 都渲染。它可以在没有“::”的情况下工作。
  • @seldary 我无法重现该问题。正如我在编辑中解释的那样,每个以 :: 为前缀的表达式都对我很有效。如果有疑问,你能做一个小提琴吗?
  • 起初它似乎对我也不起作用,因为 ngClass 定义了多个类。我很快发现绑定仍然是绑定的,因为在 ngClass 中使用的一些监视变量尚未定义(我们知道 angular 会在释放监视程序之前等待首先定义值)。这是一个小小提琴来演示这种行为jsfiddle.net/2LkyLoop
  • @MaxRocket bindonce 语法已在 Angular 1.3 中添加。所以它不会在 1.2 或更低版本中工作
  • ng-if 的一次性绑定似乎不起作用。无论有没有::,观察者数量都非常高。它适用于 ng-class,但 ng-if 似乎不服从我的一次性绑定(1.5.6)。请注意,我正在尝试单向绑定来自 ng-repeat 的对象属性。不确定这是否会有所不同。
猜你喜欢
  • 2014-07-17
  • 2016-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多