在没有变化时捕获 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")
});
}
}
})
如果您只想重新加载控制器,那么您可以简单地在状态级别上提及 reload: true
。
这不是一个合适的方法。它由我解决。
我想使用 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")
});
}
}
})
如果您只想重新加载控制器,那么您可以简单地在状态级别上提及 reload: true
。
这不是一个合适的方法。它由我解决。