1

更新:我挖得更深一点,发现Angular 在1.2.0 之后不推荐使用自动展开承诺。

我知道 Angular JS 将评估作为承诺的范围变量,然后在承诺履行时更新控制器的视图。

我的问题是:

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 回答