皆さん、問題があります。私は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>
問題は、約束が解決されているにもかかわらず、ビューは約束が解決されるのを待って結果を表示することは問題ありませんが、すぐには実行されないことです。このコードを追加してリンクをクリックした場合にのみ表示されます。
// View:
<a ng-click="apply()">Apply</a>
// Controller:
$scope.apply = function() {
$scope.$apply();
};
約束が存在するダイジェストの部分は、ビュー/コントローラーのスコープが変更されたときに実行されるダイジェストとは別に存在しますか?遅延が解決されたときに、ビュー/コントローラーのスコープでダイジェストを自動的に実行するにはどうすればよいですか?
ありがとう!