Angular UI 路由器究竟可以触发状态更改?

What exactly can trigger a state change with Angular UI Router?

我已将 onExit 回调添加到我的状态之一,并发现我的应用程序正在退出并重新进入我的状态,而我认为它不是。我查看了他们的文档,但没有找到任何内容可以准确解释什么会导致状态转换。

我有这样的东西

$stateProvider
  .state('ParentState', {
    abstract: true,
    url: '/parent',
    data: {
      flow: 'Parent'
    },
    views: {
      'main': {
        template: indexTpl
      }
    },
    onExit: function() {
      console.log('onExit');
    }
  })
  .state('ChildState', {
    parent: 'ParentState',
    url: '?a&b',
    resolve: {
      resolvedData: ['$stateParams', 'service', function($stateParams, service) {
        service.resolveData($stateParams);
      }
    },
    views: {
      ...
    }
  };

我注意到的行为是,我将在 /parent?a=something&b=somethingElse 中,然后触发 a 或 b 更改为不同值的内容,这导致再次解析为 运行 .我不希望 'ParentState' 退出,因为变量在子状态中发生变化,但是正在调用 onExit。

我想知道什么情况下可以触发状态更改,以便我可以使用 onExit 回调并确切知道它何时会被调用。

根据the docs

A state corresponds to a "place" in the application in terms of the overall UI and navigation. A state describes (via the controller / template / view properties) what the UI looks like and does at that place.

因此,如果视图属性更改,状态会从 ChildState 更改为另一个 ChildState。然后,因为 ChildState 继承了 ParentState,所以 onExit 被解析为第一个 ChildState