SOに関するこの質問にはいくつかのバリエーションがあり、すでにWeb上に浮かんでいますが、それらは少し異なり、決定的な答えはありません。
基本的には、モーダルを開いたときのUI Routerの状態を変えたいと思っています。そして、2つのことが起こるようにしたい....
A)ユーザーが戻るボタンを押した場合、モーダルを閉じてURLを前の状態に戻したいのですが、前の状態コントローラーなどをリロードする必要はありません(前の状態のため、オーバーレイとモーダルを削除したいだけです)すでにオーバーレイの下にあり、ユーザーが入力中のフォームがある場合があります)/
B) ユーザーがモーダルを閉じた場合、同じことをしたいのですが、URL は前のものに戻る必要があります (モーダルはどこからでも開かれている可能性があるため、モーダルが戻る状態をハードコーディングすることはできません)モーダルが閉じます。
(A) このコードを使えばほぼ解決できます...
App.run([
'$rootScope', '$modalStack',
function($rootScope, $modalStack) {
$rootScope.$on('$stateChangeStart', function() {
var top = $modalStack.getTop();
if (top) {
$modalStack.dismiss(top.key);
}
});
}
]);
ただし、現在のポップアップの上に別のポップアップを開いた場合でも、モーダルは閉じます (前進しているか後退しているかがわからないため)。基本的には、「ユーザーが戻るボタンを押した、または状態が前の状態に遷移した場合、トップモーダルを閉じる」と言いたいです。
(B) 解き方がわかりません。モーダルが閉じられたときに状態を強制的に以前の状態に戻すことはできますが (以前の状態がわかっている場合)、上記の (A) のコードがトリガーされ、スタックから別のモーダルが削除される可能性があります。また、以前の状態が再び開始されます。基本的に、モーダルが閉じられたときに前の URL に戻りたいだけですが、完全な状態変更は行わずに、それが理にかなっていますか?
私が言うように、そこにはいくつかの半解決策がありますが、上記のシナリオを処理しているように見えるものはありません. 誰かアイデアはありますか?