web-dev-qa-db-ja.com

拒否されたpromiseの後の$ stateの遷移Angular ui-router

Angular ui-routerを使用しており、コントローラーが初期化される前に、状態の1つに解決関数を設定しています。データを取得し、ループしてURLのstateParamと一致させます、そして一致が見つかった場合は、コントローラーへのプロミスを解決し、そのオブジェクトをプロミスで返します。これですべてうまくいきます。

ただし、一致が見つからない場合は、promiseを拒否して$state.go('state');を実行することで、別の状態にリダイレクトしたいだけです。

単にこれ:

deferred.reject();
$state.go('state',{params: 'param'});

しかし、これは何もしないようです。コントローラーがハングするだけで、コンソールエラーなどは発生しません。何か案は?

この質問はバージョン0.xxに適用されます。バージョン1.xxでは多くの点が変更されています

18
Sean Thompson

ルート解決が拒否された場合、ui-routerは_$stateChangeError_をスローすることになっています。このイベントを監視し、そこで状態遷移をトリガーする必要があります。

ウィキに従って:

_$stateChangeError_-移行中にエラーが発生したときに発生します。 resolve関数にエラー(JavaScriptエラー、存在しないサービスなど)がある場合、従来はスローされないことに注意することが重要です。すべてのエラーをキャッチするには、この$ stateChangeErrorイベントをリッスンする必要があります。

https://github.com/angular-ui/ui-router/wiki#wiki-state-change-events


@gustavohenkeがコメントで述べたように、このハンドラーを配置するのに適した場所は、アプリの主要な.run()関数です。

31
Matt Way