1

私は ui-router とui-router-extrasを使用する AngularJS アプリケーションを持っています。そこでは、状態間のいくつかの遷移がインターセプトされ、別のものにリダイレクトされます。

基本的に、$stateChangeStartイベントがトリガーされると、アプリはその遷移が許可されているかブロックする必要があるかを確認し、ユーザーを別の場所にリダイレクトします (例: ログイン ダイアログ、プロセスのステップの欠落など)。トランジションをキャンセルすることもできます。

傍受は次のように機能します。

$rootScope.$on("$stateChangeStart", function(e,to,toParams,from,fromParams){
  if( <mustBeIntercepted> || <mustBeCancelled> ){

    // this prevents the actual state change from happening
    e.preventDefault();

    if( <redirectionRequired> ){
      $state.go( <stateName>, <stateParams>); 
    }
  }            
});

そして、これはこれまでのところうまく機能しています。問題は$previousState、遷移をキャンセルしない場合と同じように、状態の変更をキャンセルするときに、 がキャンセルを認識せず、現在の状態を以前の状態として登録することです。なので基本的$previousStateに遷移解除は意識していません。これにより、プログラムで前の状態に戻ろうとすると、$state==のため移動しません$previousState

ここでライブ デモを作成しました: http://plnkr.co/edit/dXjj2iSwDU1DtPMuqW1W?p=preview

基本的に、Step1をクリックしてからConfirmをクリックすると、アプリは遷移をキャンセルし、確認するかどうかを尋ねます。確認すると、本来の状態に遷移します。実際のアプリでは、これは行われませんconfirmが、同じ方法で回答をブロックできないカスタム オーバーレイを使用して行われることに注意してくださいconfirm

お気づきのように、上部のバーには と の内容を示す 2 つのラベルが$stateあり$previousStateます。confirmプロンプトをキャンセルする$previousStateと、移行が行われなかったにも関わらず、「Step1」への変更が表示されます。

どうすればこれを回避できますか?

4

1 に答える 1

0

バグが報告され、解決されました: https://github.com/christopherthielen/ui-router-extras/issues/120

于 2015-02-03T00:05:47.960 に答える