我用一个常量参数(页面),一个动态参数(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'的值。我只是想要保留以前的值。无论如何要实现这个?
答案 0 :(得分:1)
在函数调用中添加另一个参数; {inherit:false}
告诉$state.go()
不要继承以前的值。
$state.go("test", {id: '7'}, {inherit: false});
inherit
的默认设置为true
,如the docs here中所述。