我正在尝试设置一些状态如下
state('search', {
url: '',
templateUrl: '/modules/core/views/search.html',
controller: 'SearchController'
}).
state('check', {
controller: 'CheckController',
abstract: true,
template: '<ui-view></ui-view>',
params: {
subject: null
}
}).
state('check.status', {
templateUrl: '/modules/core/views/check-status.client.view.html'
}).
state('check.personal', {
templateUrl: '/modules/core/views/check-personal.client.view.html'
});
搜索结果将通过参数化ui-sref
传递到“检查”状态。
在“检查”的每个子状态中,我想要更改subject
上的某些属性,然后调用$state.go
(最好不要将subject
作为参数传递)以移动到下一个旅途中的状态。
我发现了那个
CheckController
上提供给后续状态,或者如果我提供但稍微更改,则重新加载 $state.go
。
如果重新加载CheckController
,则对subject
对象所做的更改不会在转换中保留,就像$stateParams
包含subject
对象的副本一样ui-router早些时候采取的。
有没有办法防止/控制这些行为?
编辑:
我发现这种模式有效:
state('check.status', {
templateUrl: '/modules/core/views/check-status.client.view.html',
params: {
subject: null
},
controller: function($scope, $stateParams) {
$scope.$parent.subject = $stateParams.subject;
}
}).
从抽象父级中删除param,将其添加到旅程中的第一个状态,并使用小型控制器在父级作用域上分配属性。
答案 0 :(得分:1)
我认为在您的配置中,您的孩子状态可以告诉ui-router以防止重新加载:
state('check.status', {
templateUrl: '/modules/core/views/check-status.client.view.html',
reloadOnSearch: false
})