Angularjs 如何区分浏览器后退按钮和$state.go(动态参数)?

Angularjs 如何区分浏览器后退按钮和$state.go(动态参数)?,angularjs,angular-ui-router,back,Angularjs,Angular Ui Router,Back,在某些情况下,我只需通过代码更新URL参数,而不触发任何事件。但是,如果用户使用浏览器返回按钮返回或手动更改url参数,我仍然需要触发某些操作 在UI Router v1.x之前,我曾将{notify:false}与$stateChangeSuccessuccess事件结合使用,用于此类内容。但现在,这是一条路要走,我不知道如何使这个工作了 我已经将路由的所有参数定义为动态的,当我执行$state.go.,params时,控制器不会被刷新。这是意料之中的。但是$transition.onSucc

在某些情况下,我只需通过代码更新URL参数,而不触发任何事件。但是,如果用户使用浏览器返回按钮返回或手动更改url参数,我仍然需要触发某些操作

在UI Router v1.x之前,我曾将{notify:false}与$stateChangeSuccessuccess事件结合使用,用于此类内容。但现在,这是一条路要走,我不知道如何使这个工作了

我已经将路由的所有参数定义为动态的,当我执行$state.go.,params时,控制器不会被刷新。这是意料之中的。但是$transition.onSuccess仍然会触发,我觉得有点奇怪,我不希望在这种情况下触发此事件

当我用后退按钮后退时,或者如果我手动更改参数,同样的事情也会发生。控制器未刷新,$transition.onSuccess启动

我的主要问题是如何知道一个事件来自用户,另一个来自代码?我错过了什么?我签出了onSuccess回调的transition参数,但找不到对我有帮助的任何内容。我是否应该使用不同的事件/钩子,或者这在最新的UI路由器中不再可能


Thnx.

似乎我找到了一种方法来找出过渡的来源。如果有人有不同/更好的解决方案,请发布,我不认为这是最整洁的解决方案,但它是有效的,考虑到我找不到更好的解决方案,我会坚持下去,直到有人告诉我更好的方法

 // 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
  } 
});