0

私の角張ったアプリでは、私はこの問題があります。ユーザーがリンク状態(ui-srefリンク)をすばやくダブルクリックすると、ターゲット状態が2回読み込まれます。これは、状態ウィンドウがフリーズしておらず、他の状態変化に応答しなくなった場合、耐えられるでしょう。別のui-srefリンクをクリックすると、それに応じてURLが変更され、バックグラウンドでhttpコールが行われますが、ビューは固定されます。角度uiルータで別のトランジションが実行されているときの状態遷移を防ぐにはどうすればよいですか?

私が知る必要があることは、すでに約束を解決しようとしている別の移行があるときに、どのように移行を防ぐことができるかです。私は何とか$ stateChangeStartとevent.preventDefault()で魔法を働かせることができます。私が知らないのは、解決ブロックを解決した後で移行を続行する方法と、event.preventDefault()に対応する方法です。

お時間をいただきありがとうございます。アドバイスをいただければ幸いです。

答えて

0

角度UIルーターの$ stateオブジェクトには、 'transition'というプロパティがあります。これはアクティブ遷移の途中にある場合に存在します。 1つの方法は、ui-sref属性を削除し、代わりにng-click属性を使用することです。あなたのng-click関数の中で、$ state.go()を呼び出す前に遷移オブジェクトの存在を手動でチェックすることができます。

<a ui-sref="Root.State1"> 

後HTML::

<a href="" ng-click="goToStateOne()"> 

JS:

HTMLの前に

scope.goToStateOne = function() { 
    if (!$state.transition) $state.go('Root.State1'); 
} 
+0

ありがとう、ジェフ。それは対処するいくつかのことをもたらしますが。以前は、 'ui-sref-active =" active "を使ってcssクラスをアクティブなバーに追加することができました。新しいアプローチで同じ機能を実現する上品な方法はありますか?私が思いついた最善の方法は、ng-classを使用して、現在の状態をチェックする別の関数を追加することです。 また、 'goToStateOne()'関数を何度も定義する必要がないようにサービスを作成することをお勧めします。あるいは、定義をrootscopeに配置する方が良いでしょうか? – Rook

関連する問題