ui-router对继承的对象参数的更改未持久保存为兄弟状态

时间:2016-05-05 12:08:31

标签: angularjs angular-ui-router

我正在尝试设置一些状态如下

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,将其添加到旅程中的第一个状态,并使用小型控制器在父级作用域上分配属性。

1 个答案:

答案 0 :(得分:1)

我认为在您的配置中,您的孩子状态可以告诉ui-router以防止重新加载:

state('check.status', {
  templateUrl: '/modules/core/views/check-status.client.view.html',
  reloadOnSearch: false
})