0

现在角度承诺不再自动展开: https ://github.com/angular/angular.js/commit/5dc35b527b3c99f6544b8cb52e93c6510d3ac577

我如何在这个例子中使用它: http ://plnkr.co/edit/ZRiTp2?p=preview

4

1 回答 1

2

你不能{{random}}用 HTML 表示,因为random它是 promise。

添加监听器:

 $scope.random.then(function(result) {
    alert(result);
    }, function(error) {
        alert(error.message);
    });

这是修改的Plunker

所以控制器应该是这样的:

angular.module("myApp", [])
.controller("myCtrl", function($scope, $q) {

  var deferred = $q.defer();
  setTimeout(function() {
    $scope.$apply(function() {
      deferred.resolve(Math.random());
    });
  }, 1000);

  $scope.random = deferred.promise;

   $scope.random.then(function(result) {
    $scope.randomNumber = result;
    }, function(error) {
        alert(error.message);
    });
});

HTML

 <body ng-app="myApp" ng-controller="myCtrl">
    <h1>Random Number: {{randomNumber}}!</h1>
 </body>

Promise代表一个未来值,通常是异步操作的未来结果,并允许我们定义一旦该值可用或发生错误时会发生什么。

作为旁注:

我会$timeout改用setTimeout$aplly

 var deferred = $q.defer();
  $timeout(function() {
   deferred.resolve(Math.random());
  }, 1000);

我建议你阅读这篇关于Promise的帖子。它可能会有所帮助。

于 2013-10-18T14:21:21.237 回答