现在角度承诺不再自动解包: https://github.com/angular/angular.js/commit/5dc35b527b3c99f6544b8cb52e93c6510d3ac577
如何在此示例中使用它: http://plnkr.co/edit/ZRiTp2?p=preview
答案 0 :(得分:2)
您无法在HTML中代表{{random}}
,因为random
是承诺。
添加监听器:
$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>
承诺代表未来价值,通常是未来结果 一个异步操作,并允许我们定义什么 一旦这个值可用,或者当一个值出现时,就会发生 发生错误。
作为旁注:
我会使用$timeout
代替setTimeout
和$aplly
var deferred = $q.defer();
$timeout(function() {
deferred.resolve(Math.random());
}, 1000);
我建议你阅读有关承诺的POST。这可能有所帮助。