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

Posted

技术标签:

【中文标题】在 boostrap 之后但在其他任何事情之前获取服务器设置【英文标题】:Fetch server settings after boostrap but before anything else 【发布时间】:2017-02-19 18:01:24 【问题描述】:

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

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

我的问题是我无法“停止”应用程序,只有在获取设置并填充 $rootScope 时才能继续它的日常生活。如果 fetch 或 settings 调用可能失败,应用程序应该“停止” - 所以这些设置很早就加载是至关重要的,所以我知道一切(服务、控制器、指令等)都可以访问它们。

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

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

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

我的路线既公开又受限。

我希望有人可以帮助我解决这个问题的正确方向。

【问题讨论】:

您是否有机会在您的应用程序中使用 ui-router?如果是这样解决可能是一个很好的解决方案。 嗨,Erik,我忘记了那个细节。是的,我在我的项目中使用 ui.router。我将如何解决这个问题?我前段时间一直在尝试,但没有运气 【参考方案1】:

由于您使用的是 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 来处理此问题。与通常的 Angular 承诺一样。

【讨论】:

以上是关于在 boostrap 之后但在其他任何事情之前获取服务器设置的主要内容,如果未能解决你的问题,请参考以下文章

Python:在做任何事情之前进行 Ping 测试

cordova-plugin-purchase:即使在调用命令之后,iOS 也不做任何事情

应该授予远程用户啥权限来对“数据库”做任何事情而不做其他事情?

WebSocketSession.send 不做任何事情

ChatGPTChatGPT之父:未来几十年里,人工智能几乎会做任何事情

OpenCV destroyWindow() 不做任何事情。