带有promise表达式的angularjs ng-show

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()}}似乎会导致同样的问题.

有任何想法吗?我希望这可行..

zs2*_*020 7

AngularJS自动解决模板绑定的承诺.但是,您应该使用promise ng-init来防止摘要周期在每个tick中返回一个新的promise.

<p ng-init="v=returnsAPromiseThatResolvesToABoolean()" ng-show="v">promise</p>
Run Code Online (Sandbox Code Playgroud)

  • 根据Angular 1.3文档,这不适合使用ng-init:`ngInit的唯一合适用途是用于别名ngRepeat的特殊属性,如下面的演示所示.除了这种情况,您应该使用控制器而不是ngInit来初始化范围上的值.,https://docs.angularjs.org/api/ng/directive/ngInit (2认同)

Roy*_*els 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>
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)

  • 现在减少"returnAPromiseThatResolvesToABoolean"和更多"willAtSomePointBeABooleanPropertySetToTheResolvedValueOfAPromiseInAThenCallback". (2认同)