角度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