在没有变化时捕获 UI 路由器的状态变化

Capture UI router's state change when there is no change

我想使用 UI 路由器的 $stateChangeStart 来捕获从“/foo/bar”到“/foo/bar”转换时的状态变化:

$rootScope.$on('$stateChangeStart', function() {
    // ...
});'

基本上,我想在单击当前状态的 link 时捕获,以便我可以强制重新加载。

$stateChangeStart 事件仅在浏览器 url 更改时才会触发。重定向到相同状态时 State 不会有任何变化。无法跟踪与前一个状态相同的已更改状态。这就是为什么使用 $stateChangeStart 事件无法实现您想要的。

我建议创建您自己的指令,点击它会触发检查状态的代码。

指令

.directive('uiSref', function($state){
  return {
    link: function(scope, element, attr){
      element.on('click', function(event){
        if(attr.href.substring(1, attr.href.length) === $state.current.url)
           //from here you can track state haven't changed 
           console.log("Success")
      });
    }
  }
})

Example Plunkr

如果您只想重新加载控制器,那么您可以简单地在状态级别上提及 reload: true

这不是一个合适的方法。它由我解决。