0

是否可以在全局配置某些内容,以便每次输入新路由时都会检查前一个路由是以/ modal开头还是不是不刷新控制器,只需从堆栈中删除顶层模式?Angular-UI路由器,如果来自/模态路由,则不会刷新

我想我可以通过reloadOnSearch和使用搜索参数来实现这一点,但是之后我必须设置整个网站上的每条路线来设置reloadOnSearch,因为网站上的任何路线都可能启动模式,因此这是不可取的。

任何帮助真的不胜感激。

+1

我认为这是合理的把你的状态配置在这里 –

+0

为什么你要通过路由器,如果你只是想关闭模式? – illiptic

+0

当我从/ state1到/ modal1然后到/ modal2时,我希望URL更改并且后退按钮可以回到历史记录中的前一个状态。但是,当你回到/ modal1时,它应该关闭第二个模态,然后当你回到/ state1时它应该关闭第一个模态。这一切都不应该重新载入已经在模态下愉快地坐着的state1。 – jonhobbs

回答

1

你试过这个吗?

$rootScope.$on('$stateChangeStart', 
function(event, toState, toParams, fromState, fromParams){ 
    //codes 
}) 
+0

是的,这有助于我在状态发生变化时运行代码,但是如果用户点击后退按钮,或者如果历史记录因为向前移动并打开新状态而更新,您将如何判断?您将如何取消刷新新的状态没有取消URL更改? – jonhobbs

+0

停止刷新,做,'event.preventDefault = true' –

+0

好吧,我会尝试。 – jonhobbs

0

简单角路线,你可以这样做:

yourApp.run(function($rootScope, $location){ 
    $rootScope.$on('$routeChangeStart', function(evt, next, current) { 
    // next: The next URL to which we are attempting to navigate 
    // current: The URL that we are on before the route change 

    if (current == 'modal1'){ 
     evt.preventDefault(); 
    } 
    }); 
}) 

为了调整这angular ui,只是改变$routeChangeStart到相关的一个($stateChangeStart,我认为)。

+0

这很接近,但问题是,如果用户从模态1移动到新状态(但还没有倒退),则默认操作将被阻止。这只有在用户退后或模式被解雇时才需要工作。 – jonhobbs