【问题标题】:Query Param value is not updated in angularjs router?查询参数值未在 angularjs 路由器中更新?
【发布时间】:2017-01-13 22:49:00
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 我们如何在这里继承动态参数'id'而不继承查询参数'date'?
    • {inherit:false} 不应继承任何参数值。但我不想只继承可选的参数值。
    • 有没有办法只继承动态参数值?@C14L
    • 我不确定你的意思。你能编辑你的问题并澄清你到底需要什么吗?这样,其他人也会看到它,并且可能能够提供帮助。
    • 希望你现在明白我的问题了。 @C14L
    猜你喜欢
    • 2018-04-08
    • 2017-02-09
    • 1970-01-01
    • 2017-01-16
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多