0

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,但不进行完整的状态更改,如果这有意义吗?

就像我说的那样,那里有一些半解决方案,但似乎没有任何东西可以处理上述情况。有人有什么想法吗?

4

0 回答 0