我在数据库中有一个表,我需要在我的网站上进行任何其他操作之前访问该表。我得到的值,我将在所有不同的控制器、指令、服务等中使用。我认为存储这些值的最佳位置$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});
}]);