SO上的这个问题有一些变化,并且已经在网络上流传,但它们有点不同并且没有确凿的答案。
基本上,我想在打开模式时更改 UI 路由器状态。然后,我希望发生两件事......
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,但不进行完整的状态更改,如果这有意义吗?
就像我说的那样,那里有一些半解决方案,但似乎没有任何东西可以处理上述情况。有人有什么想法吗?