在我的应用程序中,我使用$http.get()在app.run中获取了一些数据,因此需要将结果传递给控制器。当前我的控制器在此$http.get完成之前正在执行,如何才能使我的控制器在$http.get()执行之后执行
app.run(function ($rootScope, $http, $cookies) {
var currentLanguageId = angular.fromJson($cookies.get('mykey')).UserInfo.Country;
$http.get('myurl').then(function (serviceInfo) {
$rootScope.serviceURL = serviceInfo.data.serviceURL;
}, function (error) {
alert('error service info');
});发布于 2015-10-26 23:42:18
run目前不能处理异步工作。请参阅此问题:https://github.com/angular/angular.js/issues/4003
对此您有多种解决方案。您可以在没有Angular的情况下获取数据,并手动启动Angular ( How to wait for a promise in a Run block in Angular? )
或者,您可以使用路径的解析来执行此操作:AngularJS : Initialize service with asynchronous data
发布于 2015-10-27 00:20:33
您可以使用angular scope event。当获取数据时,您可以从$rootScope向所有控制器广播事件,并在目标控制器中接收此事件。
发布于 2018-02-14 13:19:47
您可以在app.run中使用$rootScope.$broadcast();,然后在控制器中使用$rootScope.$on()。
app.run(function ($rootScope, $http, $cookies) {
var currentLanguageId = angular.fromJson($cookies.get('mykey')).UserInfo.Country;
$http.get('myurl').then(function (serviceInfo) {
$rootScope.serviceURL = serviceInfo.data.serviceURL;
$rootScope.$broadcast('serviceInfoReceived')
}, function (error) {
alert('error service info');
});
});在控制器中
app.controller ('myCtrl' , function($rootScope) {
$rootScope.$on("serviceInfoReceived", function(){
console.log($rootScope.serviceURL)
});
})希望这能对你有所帮助。
https://stackoverflow.com/questions/33349655
复制相似问题