我的州定义如下:
.state("root.home.foo", {
url: "/foo/:id",
templateUrl: "/static/partials/home.foo.html",
controller: 'FooCtrl'
})
当处于该状态时,我会响应鼠标单击,想要更改参数...
$state.go('root.home.foo', { id: newId });
但是当我重新加载状态模板并重新创建控制器时,我会闪烁。我可以这样做,以便不重新创建控制器吗?它可以响应$stateChangeSuccess
事件,这就是我所需要的。
更新
根据杰森的建议,我尝试了一个子州。有用。
.state("root.home.foo", {
abstract: true,
url: "/foo",
templateUrl: "/static/partials/home.foo.html",
controller: 'FooCtrl'
})
.state("root.home.foo.itemSelected", {
url: "/:foo"
})
聆听$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);
}
});
答案 0 :(得分:1)
尝试在路线定义中设置reloadOnSearch: false
。 E.g:
.state("root.home.foo", {
url: "/foo/:id",
templateUrl: "/static/partials/home.foo.html",
controller: 'FooCtrl',
reloadOnSearch: false
})