繁体   English   中英

在boostrap之后但在其他之前获取服务器设置

[英]Fetch server settings after boostrap but before anything else

我一直在寻找答案,但是对于如何解决和实现这一目标并没有任何明确或明确的答案。

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

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

我已经尝试过$broadcast事件,并以角度将其放入我的.run函数中,但它似乎仍可以解析该应用程序(也许显然是因为它是异步的)。

apiConnector.get('api/settings/get').then(function(settings) {
  $rootScope.settings = settings;
  $rootScope.$broadcast('settings-fetched');
});

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

我的路线既是公共路线又是受限路线。

我希望有人能在正确的方向帮助我,以解决该问题。

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

ui-router文档中的示例路由配置:

$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的位置,以解决此问题。 和通常的承诺一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM