【问题标题】:Angular-UI router, not refresh if coming from /modal routesAngular-UI 路由器,如果来自 /modal 路由,则不刷新
【发布时间】:2016-09-17 06:34:04
【问题描述】:

是否可以全局配置某些东西,以便每次输入新路由时都会检查前一个路由是否以 /modal 开头,如果是,则不要刷新控制器,只需从堆栈?

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

任何帮助将不胜感激。

【问题讨论】:

  • 我认为把你的状态配置放在这里是合理的
  • 如果你只是想关闭模态,你为什么要通过路由器?
  • 当我从 /state1 转到 /modal1 再转到 /modal2 时,我希望 URL 发生变化,并且后退按钮返回到历史记录中的前一个状态。但是,当您返回 /modal1 时,它应该只关闭第二个模式,然后当您返回 /state1 时,它应该关闭第一个模式。这些都不应该重新加载状态1,它一直快乐地坐在模态框下面。
  • 我可以在这里发布我的路由配置,但任何解决方案都需要与任何通用路由配置一起使用。这就是为什么我想实现一些东西来检查在路由器启动之前是否关闭了模式。如果用户点击了后退按钮,那么 URL 应该变回原来的样子,但控制器的运行应该被取消。

标签: javascript angularjs angular-ui-router angular-ui angular-ui-modal


【解决方案1】:

你试过吗?

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

【讨论】:

  • 是的,这可以帮助我在状态更改时运行代码,但是您如何判断用户是否点击了后退按钮,或者历史记录是否已更新,因为他们正在前进并打开一个新状态,以及如何在不取消 URL 更改的情况下取消刷新新状态?
  • 停止刷新,做,event.preventDefault = true
【解决方案2】:

在简单的角度路线中,您可以这样做:

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,我认为)。

【讨论】:

  • 这很接近,但问题是,如果用户从 modal1 移动到新状态(但没有返回),那么默认操作将被阻止。这仅在用户返回或模式被关闭时才需要工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
  • 2016-12-05
  • 1970-01-01
  • 2018-10-16
  • 2017-02-01
  • 2016-11-10
  • 1970-01-01
相关资源
最近更新 更多