2016-10-25 34 views
6

我正在使用ui-router 1.0.0.beta.3。如何在转换期间路由下一个状态的参数?Ui路由器:如何获得转换中的下一个状态参数

index.run.js

$transitions.onStart({ to: '**' }, verifyAuth); 

function verifyAuth(trans) { 
    let nextState = trans.$to(); 
    if (Auth.verify(nextState.authGroup) === -1) {  
    return $state.go('login', { nextState: nextState.name, nextParams: nextState.params}); // this doesn't work 
    } 
} 

我要存储这些,所以我可以将用户重定向到状态+状态PARAMS他试图接入,认证成功后。

login.component.js

let nextState = this.$stateParams.nextState; 
let nextParams = this.$stateParams.nextParams; 
$state.go(nextState, nextParams); 

回答

9

的回答你的问题是Transition.params()

function verifyAuth(trans) { 
    let nextState = trans.to(); 
    let nextParams = trans.params(); 
    if (Auth.verify(nextState.authGroup) === -1) {  
    return $state.go('login', { nextState: nextState.name, nextParams: nextParams}); 
    } 
} 

不过,我建议学习ui-router 1.0 sample app进行认证检查和登录如何重定向:

这个钩子通过返回$state.target('login')

https://github.com/ui-router/sample-app-ng1/blob/master/app/global/requiresAuth.hook.js#L15-L24

在登录状态重定向该未鉴权过渡到登录状态时,“状态返回登录后”被确定。它使用Transition.redirectedFrom()检查原始转场的目的地。

https://github.com/ui-router/sample-app-ng1/blob/master/app/main/app.states.js#L44-L83

+0

很好的答案,但,作为附录,如果你坚持的传统项目,无法处理这么多的重构一气呵成,在1.0.5我发现我可以用'反式。$将()'和'trans。$ from()'作为替换放置。希望我可以再次重构它,以便随着示例应用程序的策略。 – toxaq

相关问题