使用$ stateChangeStart进行UIRouter登录重定向

时间:2015-10-19 10:41:09

标签: angularjs angular-ui-router

我使用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 ???

1 个答案:

答案 0 :(得分:0)

我真的不明白ui.router的机制是什么。但是我把它破解成最初的路线改变(也就是状态'以及状态' home')不在处理程序中。但在其他地方。在我看来,只有在应用程序第一次启动时才会出现问题。

步骤:

1.创建一个根抽象状态,执行$ stateChangeStart处理程序的相同重定向逻辑。

2.增加

if(!from.name) {
    return;
}

到$ stateChangeStart处理程序的开头。