我使用angular1.4,ui.router0.2.15。尝试在$ stateChangeStart中重定向到登录状态。这是逻辑:
self.qualityOfService = NSQualityOfServiceUtility;
我认为执行会像:
$rootScope.on('$stateChangeStart', function(){
if(!isLoggedIn && toState.name !== 'login') {
console.log('go to login');
e.preventDefault();
$state.go('login');
} else if (isLoggedIn && toState.name === 'login') {
console.log('go to home');
e.preventDefault();
$state.go('home');
} else {
console.log('no change');
}
});
但事实上它是:
event1: from:'', to:'home', 'go to login'
event2: from:'', to:'login', 'no change'
...then proceed
我发现event3是angular-ui-router.js event1: from:'', to:'home', 'go to login'
event2: from:'', to:'login', 'no change'
event3: from:'', to:'home', 'go to login'
event4: from:'', to:'login', 'no change',
event5: from:'', to:'home', 'go to login',
...the dead loop continues until max digest loop
中的触发器:
function registerState
但是我忘记了这个问题,因为它太复杂了。
为什么event3被触发???如果我想要我的重定向,我应该注册我自己的事件,如$ myStateChangeStart ???
答案 0 :(得分:0)
我真的不明白ui.router的机制是什么。但是我把它破解成最初的路线改变(也就是状态'以及状态' home')不在处理程序中。但在其他地方。在我看来,只有在应用程序第一次启动时才会出现问题。
步骤:
1.创建一个根抽象状态,执行$ stateChangeStart处理程序的相同重定向逻辑。
2.增加
if(!from.name) {
return;
}
到$ stateChangeStart处理程序的开头。