私の1ページのアプリケーションでは、状態間を行き来するのを簡単にするために状態履歴を保存する必要があります。私は自分のページに使用しているブラウザのボタンを通過していない自分の前方と戻るボタンを持っています。ui-routerの状態履歴を管理する
これは、配列に状態を格納するために作成したサービスを使用する次のコードです。サービスで
$rootScope.$on('$stateChangeStart', function (event, toState, toParams) {
StateMgmtService.add(toState, toParams);
});
、私は次の効果に何かを持っている:
var history = [];
return {
previous: function() {
if (history && history.length > 0) {
return history[history.length - 1];
}
},
add: function (state, params) {
var historyItem = {
state: state,
parameters: params
};
history.push(historyItem);
}
};
問題は、私は戻って前の状態に戻り任意の時間は、stateChangeStartは基本的に私を汚染され解雇されていることです歴史。次の例を考える:
- 状態からBに開始 - BはCに履歴
- Bに追加される - CバックBに
- Cを追加します - Bは再び
この結果、bからc、bからcへの無限ループが発生します...したがって、基本的には、以前の項目を履歴に追加したり、履歴に戻っていることを何とか知る必要はありませんが、stateChangeStartそのような差別化は認められません。
ヘルプ!
私の現在のアプリでは、パラメータが異なるだけで同じ状態になる可能性があります。たとえば、 /page/2 /page/3 したがって、「ページ」は状態であり、2と3がパラメータです。したがって、多少不必要な状態とパラメータを比較する必要があります。 – whatsTheDiff
以前の状態が現在の状態と等しくない場合、historyItemプッシュだけを履歴に入れたい場合は、$ stateChangeStart関数スコープで検証を追加できます。 $ rootScope.on( '$ stateChangeStart'、function(イベント、toState、toParams、fromState){ if(toState === fromState){ return; } – mtamma