Web サイトで何かを行う前にアクセスする必要があるデータベースにテーブルがあります。取得した値は、さまざまなコントローラー、ディレクティブ、サービスなど全体で使用します。これらの値を保存するのに最適な場所は、$rootScope
その目的のために、次のことを行いました。
obApp.run(function($rootScope, ngProgress, $timeout) {
$.post('phpProcessingPage', function(data){
$rootScope.domains = JSON.parse(data); //this "domains" property is what i'm interested in
})
})
問題なくドメインを取得できるので、すべて問題ありません。問題は、$rootScope
サービスに挿入するときです。
obApp.factory('requestOrigin', ['$rootScope', function($rootScope){
console.log($rootScope.domains); //this is undefined at this point
return $rootScope.domains; //returns undefined
}]);
サービスコードが実行された後に応答が返されるため、そこには何もないことが予想されます。
問題は、そのファクトリ コードを複数のコントローラーで使用していて、ajax 呼び出しからデータが返されるまで待機するように実行を遅らせる方法がわからないことです。
ブロードキャストを試みましたが、retun
ある時点で結果が戻ってきたとしても、工場の処理を遅らせる方法はありません (私が知っていることです)。私が抱えているこの問題についてどうすればいいですか?
答え:
このための $rootScope の使用を廃止します。サービスから返された結果を使用するコントローラーは次のようになります。
oApp.controller(['serviceName', function(serviceName){
serviceName.then(function(response){
//here i have the data from the ajax call, the service made
//other things to do
});
}]);
サービスは次のようになります。
obApp.factory(['serviceName','$http', function(serviceName, $http){
return $http.post('phpProcessingPage.php', {cache: true});
}]);