我需要在某些情况下(通过代码)简单地更新URL参数,而不是触发任何事件。但是,如果用户使用浏览器后退按钮返回或者他手动更改了url参数,我仍然需要触发某些操作。
在UI-Router v1.x之前,我过去常常将{ notify: false }
与$stateChangeSuccess
事件结合使用。但是现在dynamic params是要走的路,我无法弄清楚如何让这项工作再进行。
我已将路由的所有参数定义为动态,当我执行$state.go(".", params)
时,控制器不会刷新。这是预期的。然而,$transition.onSuccess
确实仍然发现我发现有点奇怪,我不希望在这种情况下发生此事件。
当我使用后退按钮向后移动时,或者如果我手动更改参数时,会发生同样的事情。控制器不会刷新,$transition.onSuccess
会触发。
我的主要问题是如何知道一个事件来自用户,而另一个事件来自代码?我在这里错过了什么?我检查了onSuccess回调的转换参数,但找不到任何可以帮助我的东西。我应该使用不同的事件/钩子,或者使用最新的UI路由器,这是不可能的?
日Thnx。
答案 0 :(得分:1)
似乎我找到了一种方法来找出过渡的来源。如果有人有不同的/更好的解决方案,请发布它,我发现这不是最好的解决方案,但它有效并且考虑到我找不到更好的解决方案,我会坚持下去,直到有人告诉我更好的方法
// The "to:" ensures the event doesn't trigger for other routes
this.$transitions.onSuccess({ to: "your.route" }, (trans) => {
let changedParams = trans._changedParams();
if (trans._options.source === "url" && // transition came from URL change
changedParams && changedParams.length > 0) { // at least one param changed
// do something
}
});