现在角度承诺不再自动展开: https ://github.com/angular/angular.js/commit/5dc35b527b3c99f6544b8cb52e93c6510d3ac577
我如何在这个例子中使用它: http ://plnkr.co/edit/ZRiTp2?p=preview
你不能{{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的帖子。它可能会有所帮助。