我的问题与此类似:stop angular-ui-router navigation until promise is resolved
但是,答案似乎都没有解决这个问题。
我的应用程序存储带有令牌的cookie。当加载页面时(例如在F5之后),应用程序检查cookie,如果找到,则使用令牌加载从Web服务加载的用户设置。需要这些设置才能从我的控制器将调用的其他Web服务获取所有其他信息,因此必须在页面呈现之前加载设置。
这是我目前的代码:
$rootScope.$on( '$stateChangeStart', function(e, toState, toParams, fromState, fromParams) {
e.preventDefault();
authentication.checkCookie(function() {
if (toState.name == 'login'){
if(authentication.getLoginData()) {
//e.preventDefault();
$state.go('pricelist');
}
} else {
if(!authentication.getLoginData()) {
//e.preventDefault();
$state.go('login');
}
}
// No redirect is needed - now render the page requested
$urlRouter.sync();
});
});
不幸的是,这段代码不起作用:它只会导致无限循环。
如何检查cookie并加载用户设置(这也可以在checkCookie中完成),我怎样才能确保渲染仅继续?
答案 0 :(得分:0)
我已通过在上述链接中使用另一个答案设法解决了这个问题:
$rootScope.$on( '$stateChangeStart', function(e, toState, toParams, fromState, fromParams) {
if ($rootScope.stateChangeBypass) {
$rootScope.stateChangeBypass = false;
return;
}
e.preventDefault();
authentication.checkCookie(function() {
$rootScope.stateChangeBypass = true;
if (toState.name == 'login'){
if(authentication.getLoginData()) {
$state.go('pricelist');
} else {
$state.go(toState, toParams);
}
} else {
if(!authentication.getLoginData()) {
$state.go('login');
} else {
$state.go(toState, toParams);
}
}
});
});
它不是一个干净的解决方案,但它确实有效。