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

sel*_*ary 3 javascript performance binding angularjs

问题:

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

<div ng-if="::(myObject.foo === 'bar')"></div>
Run Code Online (Sandbox Code Playgroud)

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

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

  • 卸下::解决了这个过程-不是一个选项(性能明智)
  • 替换fooisFooEqualsBar,在myObject解析(并绑定到::isFooEqualsBar)时获取其值- 它需要许多新属性
  • 返回稳定的1.2版本,并使用bindonce

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

Kar*_*les 5

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

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

undefined === 'bar' is false.
Run Code Online (Sandbox Code Playgroud)

也许是这样的

<div ng-if="::(myObject.foo ? myObject.foo === 'bar' : undefined)"></div>
Run Code Online (Sandbox Code Playgroud)

  • 这也应该有效:ng-if ="::(myObject.foo && myObject.foo ==='bar')" (7认同)
  • 你也可以编写一个函数:$ scope.uc = function(a,b){return a?a === b:undefined},并且通常使用它.<div ng-if ="uc(myObject.foo,'bar')"> </ div> (2认同)