在angularjs路由器中没有更新查询参数值?

时间:2016-09-06 13:01:03

标签: angularjs angular-ui-router angular-ui-router-extras

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

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

我从我的控制器调用此状态,并传递查询参数,如此

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

在调用此状态后,我正在接受params,

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应该是未定义的,因为我在调用状态时没有传递它。但是在默认情况下,一旦我通过它,它就会通过。因为它是可选的参数,所以在不通过的时候应该忽略它。如何在不传递参数的情况下再次调用相同的状态时使其“未定义”?我知道如果我通过$ stateParams.date = null或其他名称它会反映出来。但我不需要通过我的路由器URL传递?还有其他方法可以达到这个目的吗?

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

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

这里我需要动态param id和type。如果假设我使用id的更新值调用,则不继承type。但我想继承类型参数值而不是日期(条件Param)值。

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

console.log($ stateParams.type) - > undefined。(这里我希望'type'param值应该继承而不传递。becaz我不想更新'type'的值。我只是想要保留以前的值。无论如何要实现这个?

1 个答案:

答案 0 :(得分:1)

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

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

inherit的默认设置为true,如the docs here中所述。