角度1.6.1およびui-router 1.0.0rc;リダイレクトで角度ui-router 1.0.0rcの遷移が優先されます
私は、ある状態から別の状態にリダイレクトしているときにui-routerの問題に遭遇しています。
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)
からに移動しない場合であるが、baz, qux, ..
からbar
まで)は無限の遷移ループに終わる。
bar
にリダイレクトする必要があります
foo
から
qux
、行くから例えば
、しかしqux -> intro
ループに引っ掛かり:
TransitionRejection(type: 2, message: The transition has been superseded by a different transition, detail: Transition#2704('qux'{} -> 'intro'{}))
(ブラウザがクラッシュしたので、私はqux -> foo
の以前のエラーメッセージはありません)誰かがリダイレクトの解決策を持っているのですか、グローバルキャッチオールを正しく使用しているかどうかを確認できますか?すべてを捕まえることは死のループを引き起こしていますが、それは最初にそれを引き起こしたリダイレクト拒否の問題には二次的です。
これは、トリガをリダイレクトなぜ私の使い方がわから正しくありませんが、ないことが考えられます'transition.onError'。パッチは一致条件を絞り込むことです: '$ transition.onError({to:state =>!state.redirectTo}、trans => trans.router.stateService.go( 'intro')); onError({}、...) ' – Billiam