我一直在寻找这方面的答案,但对于如何解决和解决这个问题没有任何明确或明确的答案。
在我的anguarJS应用程序中,我想确保AngularJS加载/引导后的第一件事,它通过$http
进入服务器并获取一些设置(通过调用api:{{1 }) - 取决于子域和/或如果有JWT或其他用户会话,它将检索一些应添加到/api/settings/get
的设置数据。
我的问题是我无法“暂停”应用程序并且仅在获取设置并填充$rootScope
时才继续它的日常生活。如果提取或设置调用可能会下降,应用程序应该“停止” - 所以这些设置很早就加载是至关重要的,因此我知道所有内容(服务,控制器,指令等)都可以访问它们。
我尝试使用$rootScope
事件并将其放入我的$broadcast
函数中,但它似乎仍在解析应用程序(可能显然是因为它是异步的)。
.run
但是,我不喜欢这种方法,并要求我到处听这个事件。
我的路线既公开也有限制。
我希望有人可以帮助我找到解决方法的正确方向。
答案 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重定向来解决此问题。与通常的角度承诺一样。