2

私はちょうど角度-UI-ルータ1.0.xの:event.preventDefault&event.defaultPrevented代替

$transitions.onStart({}, function(tras){ 
    // need a code equivalent to e.preventDefault 
    // need a code to identify event.defaultPrevented 
    // other code goes here... 

    // get parent states 
    _o.util.getAncestorStates(toState.name, true).reverse() 
     .forEach(function (state) { 
      // certain condition to call event.preventDefault() 

      if(event.defaultPrevented) {....} 
    }); 
}); 

$transitions.onStart

$rootScope.$on('$stateChangeStart', function(e, ...){ 
    e.preventDefault(); 
    // other code goes here... 
}); 

$stateChangeStartを置き換えると私は推測し、我々は防ぐことができますe.preventDefault()の代わりにreturn $q.reject()を追加して移行しましたが、return $q.reject()のコードがどのように実行されるのか理解できませんでした。

また、event.defaultPreventedをどのように置き換えることができますか?

私はtransition.promiseで何かをする必要がありますが、明確ではないと思います。

私は申し訳ありませんが、公式の文書 - https://ui-router.github.io/ng1/docs/latest/を簡単に理解できません。誰も私が上記のコードのより良い説明や置き換えを見つけるのを助けることができますか?あなたはこれら二つのオプションの1つを選択することができ

+0

は、私はあなただけ ''私は必要なのですか理由を理解するために移行.. – tanmay

+0

[OK]を、私はちょうど追加より多くのスニペットをキャンセルする.onStart' 'からfalse'を返すことができると思いevent.defaultPrevented ' - すべての親ステートを処理します。特定の条件では、' event.preventDefault'を呼び出します。他の親ステートに対して 'event.defaultPrevented'をチェックします。 – Garfield

+1

プロミスチェーンでは、前のブロックがキャンセルされた場合、後続の '.then'ブロックのコードはスキップされます。前のハンドラがトランジションをキャンセルした場合、 'onStart'ハンドラは決して呼び出されません。 'event.defaultPrevented'は' onStart'ハンドラで 'true'になることはありません。代わりに、 'onError'ハンドラチェーンが呼び出され、' event.defaultPrevented'がtrueの場合に限り、それらのブロックが呼び出されます。 – georgeawg

答えて

3

は、あなたのロジックによって異なります。あなたは$transition.abort()を使用することができます

  • 1.0.3角度-UI-ルータので。非同期呼び出し後に状態の変更を中止する必要がある場合は、Cleanerを選択します。

    $transitions.onStart({}, function($transition) { 
        $transition.abort(); 
        //more code... 
    }); 
    
  • @tanmayがコメントで言うようにまた、あなたはそれをキャンセルするために、単純なreturn falseを使用することができます。これは非安定版でも機能します(1.0.0.betaと1.0.0.rc)。 (Check it in ui-rooter docs

    $transitions.onStart({}, function($transition) { 
        //code ... 
        return false; 
    }); 
    
+1

'$ q.reject'で2番目のポイントを使いました。 – Garfield

関連する問題