1

更新: もう少し深く掘り下げたところ、1.2.0 に続くプロミスの自動アンラップが非推奨になっていることがわかりました。

Angular JS は、promise であるスコープ変数を評価し、promise が満たされたときにコントローラーのビューを更新することを理解しています。

私の質問は:

http://jsfiddle.net/dhruvkaran/Lv5vF/4/

<div ng-app="myApp">
  <div ng-controller="DemoController">
    {{foo}}
  </div>
</div>

<script>
  var myApp = angular.module("myApp", []);

  myApp.controller('DemoController', function($scope) {
    $scope.foo = "bar";
  });
</script>

問題なく動作しますが、

http://jsfiddle.net/dhruvkaran/Lv5vF/5/

<div ng-app="myApp">
  <div ng-controller="DemoController">
    {{foo}}
  </div>
</div>

<script>
  var myApp = angular.module('myApp', []);

  myApp.controller('DemoController', function($scope, $q) {
    var deferred = $q.defer();
    deferred.resolve("bar");
    $scope.foo = deferred.promise;
  });
</script>

ではない。

ここで何が間違っていますか?

4

1 に答える 1

3

あなたは約束を間違って使用しています。約束とは、将来、解決または拒否されて実現されるものです。また、スコープ変数は必ずしも約束ではないため、混乱している可能性があります。promise を正しく使用するには、promise の "then" 関数を使用してコールバックを追加する必要があります。

myApp.controller('DemoController', function($scope, $q) {
  var deferred = $q.defer();
  deferred.resolve("bar");

  //Note: Promises are not normally resolved inline like above
  deferred.promise.then(function (data) {
     $scope.foo = data;
  });

});
于 2014-01-11T04:58:42.313 に答える