我正在使用ng-show
表达式解析为解析为布尔值的 promise 。当我这样做时,我得到10个摘要迭代溢出。
请参阅http://plnkr.co/edit/XibYM0kCnXhKjNUeTsp3?p=preview
<body ng-controller="MainCtrl">
<p ng-show="returnsABoolean()">non promise</p>
<p ng-show="returnsAPromiseThatResolvesToABoolean()">promise</p>
</body>
控制:
$scope.returnsABoolean = ()->
true
$scope.returnsAPromiseThatResolvesToABoolean = ()->
$q.when(false)
我知道{{somePromise}}
会解决,但{{returnsAPromiseThatResolvesToABoolean()}}
似乎会导致同样的问题。
有什么想法吗?我希望这可以工作..
答案 0 :(得分:7)
AngularJS自动解决了模板绑定的承诺。但是,您应该使用ng-init
中的promise来阻止摘要周期在每个tick中返回一个新的promise。
<p ng-init="v=returnsAPromiseThatResolvesToABoolean()" ng-show="v">promise</p>
答案 1 :(得分:5)
Plunker:http://plnkr.co/edit/NvjP5qHafhyIWXXotBej?p=preview
这就像我认为你想要的那样。 $q.when()
返回一个promise对象,因此ng-show
没有得到布尔值;这是一个承诺对象。
更新了模板:
<body ng-controller="MainCtrl">
<p ng-show="returnsABoolean()">non promise</p>
<p ng-show="returnsAPromiseThatResolvesToABoolean">promise</p>
</body>
更新了Ctrl:
$scope.returnsABoolean = ()->
true
promise = $q.when(false)
promise.then((val) ->
$scope.returnsAPromiseThatResolvesToABoolean = val)
答案 2 :(得分:2)