Народ, у меня проблема. Я использую 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]);
И, наконец, представление ждет, пока обещание будет разрешено, а затем отображает его:
<a ng-click="changeBrand()" id="changeBrand">Change</a>
<p ng-bind="brand"></p>
Проблема в том, что хотя промис и обрабатывается, и хотя представление прекрасно ждет, пока промис будет разрешен и показывает результат, оно не делает этого немедленно. Он появляется только тогда, когда я добавляю этот код и нажимаю ссылку:
// View:
<a ng-click="apply()">Apply</a>
// Controller:
$scope.apply = function() {
$scope.$apply();
};
Существует ли часть дайджеста, в котором живет обещание, отдельно от дайджеста, который запускается при изменении области видимости/контроллера? Как я могу заставить дайджест автоматически запускаться в области представления/контроллера при разрешении отложенного?
Спасибо!