在 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 之后但在其他任何事情之前获取服务器设置的主要内容,如果未能解决你的问题,请参考以下文章
cordova-plugin-purchase:即使在调用命令之后,iOS 也不做任何事情
应该授予远程用户啥权限来对“数据库”做任何事情而不做其他事情?