角度一次性绑定无法等待布尔条件

时间:2014-07-22 07:50:31

标签: javascript angularjs performance binding

问题:

使用angularjs 1.3.0 beta 15,我试图“绑定”到从服务器获取的对象的属性:

<div ng-if="::(myObject.foo === 'bar')"></div>

如果在加载此html时尚未提取myObject(其承诺未解决),则angular将表达式评估为false(无论当然是什么值),并停止观看它。

我宁愿避免的可能的解决方法:

  • 删除::当然解决了这个问题 - 不是一种选择(性能方面)
  • foo替换为isFooEqualsBar,在myObject解析后获取其值(并绑定到::isFooEqualsBar) - 它需要大量新属性< / LI>
  • 返回稳定的1.2版本,并使用bindonce

这是一个错误吗?或者我使用::语法错误了?

1 个答案:

答案 0 :(得分:5)

  

一次性表达式会在稳定后停止重新计算,   如果表达式结果为a,则在第一次摘要后发生   非未定义的值(参见下面的值稳定算法)。

我认为问题是你的表达在第一次摘要后是假的。

undefined === 'bar' is false.

也许像

<div ng-if="::(myObject.foo ? myObject.foo === 'bar' : undefined)"></div>