0

我已经用一个常量参数(页面)、一个动态参数(id)、一个查询参数(日期)来定义我的状态。

   $stateProvider.state('test', {
   url: '/page/:id?date',
   controller: 'MyCtrl'       
 });

我通过像这样传递查询参数从我的控制器调用此状态

$state.go("test", {id: '5',date:'06/09/2016'});

调用此状态后,我得到了参数,

console.log($stateParams.id) -> '5';
console.log($stateParams.date) -> '06/09/2016'(as expected results)

我再次从我的控制器调用相同的状态,而不像这样传递查询参数。

$state.go("test", {id: '7'});

现在我得到以下状态参数

console.log($stateParams.id) -> '7';(expected)
console.log($stateParams.date) -> '06/09/2016';(which shouldn't be right here.)

$stateParams.date 应该是未定义的,因为我在调用状态时没有传递它。但是默认情况下在 Url 中它是通过的,一旦我通过了它。因为它是可选参数,所以在不通过时应该忽略它。如何在不传递参数的情况下再次调用相同状态时使其“未定义”?我知道如果我通过 $stateParams.date=null 或其他名称它会反映。但我不需要通过我的路由器 url?有没有其他方法可以实现这一目标?

更新 1: 在发布答案后,我使用 '{inherit:false}' 作为预期结果。但是它没有继承我在调用状态时没有传递的任何参数值。但我不想只继承可选的参数值。请参阅下面的代码。

  $stateProvider.state('test', {
   url: '/page/:id/:type?date',
   controller: 'MyCtrl'       
 });

在这里,我必须动态参数 id 和类型。如果假设我只用更新的 id 值调用,那么类型不会被继承。但我想继承类型参数值而不是日期(条件参数)值。

$state.go("test", {id: '3'},{inherit:false});

console.log($stateParams.type) -> undefined.(这里我希望'type'参数值应该被继承而不传递。因为我不想更新'type'的值。我只希望以前的值应该保持。无论如何要做到这一点?

4

1 回答 1

1

在函数调用中添加另一个参数;{inherit:false}告诉$state.go()不要继承以前的值。

$state.go("test", {id: '7'}, {inherit: false});

的默认inherit值为true,如此处的文档中所述。

于 2016-09-06T18:48:40.183 回答