角度1.6.1和ui-router 1.0.0rc;角度ui路由器1.0.0rc轉換取代重定向
我遇到了ui-router問題,同時從一個狀態重定向到另一個狀態。
A TransitionRejection
因爲被取代而被註冊。
Transition #1 r0: Started -> "Transition#1('intro'{} -> 'foo'{})"
Transition #1 r0: <- Rejected "Transition#1('intro'{} -> 'foo'{})", reason: TransitionRejection(type: 2, message: The transition has been superseded by a different transition, detail: 'bar'{"id":"uuid-1234-uuid"})
Transition #2 r0: Ignored <> "Transition#2('intro'{} -> 'intro'{})"
Transition #3 r0: Started -> "Transition#3('intro'{} -> 'bar'{"id":"uuid-1234-uuid"})"
Transition #3 r0: <- Success "Transition#3('intro'{} -> 'bar'{"id":"uuid-1234-uuid"})", final state: bar
注:全球有所有,它是用於身份驗證控件時加載的狀態,當用戶沒有解決一個問題:
// state 'intro' is '/'
.config($urlRouterProvider => {
$urlRouterProvider.otherwise('/');
})
.run(($transitions, $trace) => {
$trace.enable('TRANSITION');
$transitions.onError({}, trans => trans.router.stateService.go('intro'));
}
過渡段
// there is no foo component, it's a straight redirect
.component('bar', {
template: someTemplate,
controller: someCtrl
})
.config($stateProvider => {
let states = [
{
name: 'foo',
url: '/foo',
redirectTo: { state: 'bar', params: { id: 'uuid-1234-uuid' } }
},
{
name: 'bar',
url: '/bar/:id',
component: 'bar'
}
];
states.forEach(s => $stateProvider.state(s));
})
而在這個intro -> foo
的例子最終會以正確的狀態bar
結束,其他轉換(當不從intro(default)
到bar
,但從baz, qux, ..
到bar
)最終在一個無盡的過渡循環。
例如,從qux
到foo
,這應該重定向到bar
去,但被逮住在qux -> intro
循環:(我沒有的qux -> foo
以前的錯誤消息,因爲該瀏覽器崩潰)
TransitionRejection(type: 2, message: The transition has been superseded by a different transition, detail: Transition#2704('qux'{} -> 'intro'{}))
有沒有人有重定向的解決方案,或者可以看到我是否正確使用全局捕獲?全部捕獲都會導致死亡循環,但這是次要的首先觸發它的重定向拒絕問題。
這可能是因爲我的用法是不正確的,但不知道爲什麼重定向觸發器'transition.onError'。一個補丁可以改進匹配條件:'$ transition.onError({to:state =>!state.redirectTo},trans => trans.router.stateService.go('intro'));'而不是一個''。 onError({},...)' – Billiam