Angular ui-routerを使用しており、コントローラーが初期化される前に、状態の1つに解決関数を設定しています。データを取得し、ループしてURLのstateParamと一致させます、そして一致が見つかった場合は、コントローラーへのプロミスを解決し、そのオブジェクトをプロミスで返します。これですべてうまくいきます。
ただし、一致が見つからない場合は、promiseを拒否して$state.go('state');
を実行することで、別の状態にリダイレクトしたいだけです。
単にこれ:
deferred.reject();
$state.go('state',{params: 'param'});
しかし、これは何もしないようです。コントローラーがハングするだけで、コンソールエラーなどは発生しません。何か案は?
この質問はバージョン0.xxに適用されます。バージョン1.xxでは多くの点が変更されています
ルート解決が拒否された場合、ui-routerは_$stateChangeError
_をスローすることになっています。このイベントを監視し、そこで状態遷移をトリガーする必要があります。
ウィキに従って:
_$stateChangeError
_-移行中にエラーが発生したときに発生します。 resolve関数にエラー(JavaScriptエラー、存在しないサービスなど)がある場合、従来はスローされないことに注意することが重要です。すべてのエラーをキャッチするには、この$ stateChangeErrorイベントをリッスンする必要があります。
https://github.com/angular-ui/ui-router/wiki#wiki-state-change-events
@gustavohenkeがコメントで述べたように、このハンドラーを配置するのに適した場所は、アプリの主要な.run()
関数です。