我已经用一个常量参数(页面)、一个动态参数(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'的值。我只希望以前的值应该保持。无论如何要做到这一点?