12

ブール値に解決されるプロミスng-showに解決される式で使用しています。これを行うと、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()}}が、同じ問題が発生しているようです。

何か案は?これでうまくいくと思います..

4

3 に答える 3

5

プランカー: http://plnkr.co/edit/NvjP5qHafhyIWXXotBej?p=preview

これは、意図したとおりに機能します。$q.when()promise オブジェクトを返すためng-show、ブール値を取得していません。promise オブジェクトを取得しています。

更新されたテンプレート:

  <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)
于 2013-09-06T21:49:15.117 に答える
2

ここでソースを確認すると、promise が で解決されていることがわかります。そのnextTickため、$scopeangular が次に$digestサイクルを作成したときにのみ変更が行われます。しかし、関数はサイクルごとに新しい promise を返し$digest、以前の promise の解決された値を実際に取得することはありません。

ここでも議論されている古い問題です。

ここで行ったように、promise への「永続的な」参照を関数の外部に保持することで、この問題を克服できます。

于 2013-09-06T21:58:46.240 に答える