在boostrap之后但在其他任何事情之前获取服务器设置

时间:2016-10-11 08:20:03

标签: angularjs asynchronous angularjs-scope angularjs-rootscope angularjs-bootstrap

我一直在寻找这方面的答案,但对于如何解决和解决这个问题没有任何明确或明确的答案。

在我的anguarJS应用程序中,我想确保AngularJS加载/引导后的第一件事,它通过$http进入服务器并获取一些设置(通过调用api:{{1 }) - 取决于子域和/或如果有JWT或其他用户会话,它将检索一些应添加到/api/settings/get的设置数据。

我的问题是我无法“暂停”应用程序并且仅在获取设置并填充$rootScope时才继续它的日常生活。如果提取或设置调用可能会下降,应用程序应该“停止” - 所以这些设置很早就加载是至关重要的,因此我知道所有内容(服务,控制器,指令等)都可以访问它们。

我尝试使用$rootScope事件并将其放入我的$broadcast函数中,但它似乎仍在解析应用程序(可能显然是因为它是异步的)。

.run

但是,我不喜欢这种方法,并要求我到处听这个事件。

我的路线既公开也有限制。

我希望有人可以帮助我找到解决方法的正确方向。

1 个答案:

答案 0 :(得分:0)

由于您使用的是ui-router,我建议您在进入默认状态前使用resolve:https://github.com/angular-ui/ui-router/wiki#resolve

来自ui-router docs的示例路由配置:

$stateProvider.state('myState', {
      resolve:{
         // Example using function with returned promise.
         // This is the typical use case of resolve.
         // You need to inject any services that you are
         // using, e.g. apiConnector in this example
         settingsObj:  function(apiConnector){
            return apiConnector.get('api/settings/get');
         }
}

如果此失败,您可以通过使用.then()将用户从应用程序或w / e重定向来解决此问题。与通常的角度承诺一样。