Roy*_*ove 12 javascript angularjs
我正在使用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>
Run Code Online (Sandbox Code Playgroud)
按Ctrl:
$scope.returnsABoolean = ()->
true
$scope.returnsAPromiseThatResolvesToABoolean = ()->
$q.when(false)
Run Code Online (Sandbox Code Playgroud)
我知道这{{somePromise}}会解决,但{{returnsAPromiseThatResolvesToABoolean()}}似乎会导致同样的问题.
有任何想法吗?我希望这可行..
AngularJS自动解决模板绑定的承诺.但是,您应该使用promise ng-init来防止摘要周期在每个tick中返回一个新的promise.
<p ng-init="v=returnsAPromiseThatResolvesToABoolean()" ng-show="v">promise</p>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
更新了Ctrl:
$scope.returnsABoolean = ()->
true
promise = $q.when(false)
promise.then((val) ->
$scope.returnsAPromiseThatResolvesToABoolean = val)
Run Code Online (Sandbox Code Playgroud)