【发布时间】:2017-02-17 18:21:57
【问题描述】:
我正在使用Angular 1.5.8 和angular-ui-router 0.3.2。
我需要在每次路由更改时解析身份验证方法。
我不想为每条路由添加 resolve 属性,所以我在 App.run 中创建了它
//check permissions
$rootScope.$on('$stateChangeStart', function (evt, toState) {
if ($localStorage.token || toState.authenticated) {
$http.defaults.headers.common = {
'Authorization': 'Token ' + $localStorage.token,
'Accept': 'application/json'
};
permissionAPI.me()
.then(function(data){
$rootScope.user = data;
})
.catch(function(){
if(toState.authenticated) {
$rootScope.logout();
}
})
}
else {
if(toState.authenticated) {
$rootScope.logout();
}
}
});
`
它通常运行良好,但我注意到很多时候应用程序在 promise permissionAPI.me() 解决之前就已经路由,并且稍后会导致错误。
如何确保路由在该承诺之后立即生效?
或者,我如何通过传递来自$stateChangeStart 的承诺为我的所有路线创建一个主要的resolve?
谢谢!
【问题讨论】:
-
这将在 Promise 开始后总是路由,而不是在 Promise 解决时路由。处理此问题的规范方法是创建一个抽象路由,其中包含其下所有路由的
resolve。不幸的是,尝试使用本质上是异步的 Promise 作为同步函数并不是一个好的解决方案。 -
如何连接来自
$stateChangeStart的承诺来解析函数? -
这不是我的意思,我怎样才能将承诺从
$stateChangeStart传递给ui-router?
标签: javascript angularjs routes angular-ui-router