如果仅更改params,则停止角度ui-router重新加载状态的模板和控制器?

Rob*_*b N 9 angularjs angular-ui-router

我有州定义如下:

.state("root.home.foo", {
   url: "/foo/:id",
   templateUrl: "/static/partials/home.foo.html",
   controller: 'FooCtrl'
})
Run Code Online (Sandbox Code Playgroud)

当处于该状态时,我响应鼠标单击,想要更改参数...

$state.go('root.home.foo', { id: newId });
Run Code Online (Sandbox Code Playgroud)

但是当我重新加载状态模板并重新创建控制器时,我会闪烁.我可以这样做,以便不重新创建控制器吗?它可以响应一个$stateChangeSuccess事件,这就是我所需要的.

更新

根据杰森的建议,我尝试了一个子州.有用.

.state("root.home.foo", {
   abstract: true,
   url: "/foo",
   templateUrl: "/static/partials/home.foo.html",
   controller: 'FooCtrl'
})
.state("root.home.foo.itemSelected", {        
   url: "/:foo"
})
Run Code Online (Sandbox Code Playgroud)

听取这个$stateChangeSuccess事件......

// In controller's constructor
$scope.$on('$stateChangeSuccess', function (e, to, toParams, from, fromParams) {
  if ($state.current.name == 'root.home.foo.itemSelected') {       
    handleSelection(toParams.id);
  }
});
Run Code Online (Sandbox Code Playgroud)

Sam*_*uel 1

尝试reloadOnSearch: false在路由定义中进行设置。例如:

.state("root.home.foo", {
  url: "/foo/:id",
  templateUrl: "/static/partials/home.foo.html",
  controller: 'FooCtrl',
  reloadOnSearch: false
})
Run Code Online (Sandbox Code Playgroud)