各位,我有问题。我正在使用 AngularJS,并且在 Angular 服务定义中设置了一个延迟对象:
angular.module('myServices', []).
service('Brand', function($rootScope, $q){
var service = {
getNext: function() {
var deferred = $q.defer();
setTimeout(function() {
deferred.resolve('foo');
}, 2000);
return deferred.promise;
}
};
return service;
});
该服务在我的控制器中使用:
angular.module({
controllers: {
brand: function($scope, Brand) {
$scope.changeBrand = function() {
$scope.brand = Brand.getNext();
}
}
}
}, ['myServices]);
最后,视图等待 promise 被解决,然后显示它:
<a ng-click="changeBrand()" id="changeBrand">Change</a>
<p ng-bind="brand"></p>
问题在于,虽然 promise 正在解决,并且视图在等待 promise 被解决并显示结果时做得很好,但它并没有立即执行。它仅在我添加此代码并单击链接时显示:
// View:
<a ng-click="apply()">Apply</a>
// Controller:
$scope.apply = function() {
$scope.$apply();
};
承诺所在的摘要部分是否与视图/控制器范围更改时运行的摘要分开存在?当延迟解决时,如何让摘要自动在视图/控制器的范围内运行?
谢谢!