首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何让控制器等待app.run完成

如何让控制器等待app.run完成
EN

Stack Overflow用户
提问于 2015-10-26 23:34:12
回答 4查看 2.9K关注 0票数 4

在我的应用程序中,我使用$http.get()在app.run中获取了一些数据,因此需要将结果传递给控制器。当前我的控制器在此$http.get完成之前正在执行,如何才能使我的控制器在$http.get()执行之后执行

代码语言:javascript
运行
复制
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');
    });
EN

回答 4

Stack Overflow用户

发布于 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

票数 1
EN

Stack Overflow用户

发布于 2015-10-27 00:20:33

您可以使用angular scope event。当获取数据时,您可以从$rootScope向所有控制器广播事件,并在目标控制器中接收此事件。

票数 0
EN

Stack Overflow用户

发布于 2018-02-14 13:19:47

您可以在app.run中使用$rootScope.$broadcast();,然后在控制器中使用$rootScope.$on()

代码语言:javascript
运行
复制
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');
    });
});

在控制器中

代码语言:javascript
运行
复制
app.controller ('myCtrl' , function($rootScope) {
    $rootScope.$on("serviceInfoReceived", function(){
         console.log($rootScope.serviceURL)
    });
})

希望这能对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33349655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档