查询字符串中带有可选参数的路由

route with optional parameters in querystring

我有一个场景,其中只能执行一个值(id 或 age 或 sex)的搜索。

如果我使用下面只传递 id 的路由,

this.router.navigate(['details'],
{
     queryParams: 
     {
         id: this.id,
         age: this.age,
         sex: this.sex,
     }
 })

url 看起来像 http://path/details?id=10&age=&sex=

我希望我的 url 像

path/details?id=10 id 搜索

path/details?age=25 年龄搜索

所以我重构了我的代码,

if(this.id) {
    this.router.navigate(['details'],
    {
         queryParams: 
         {
             id: this.id
         }
     })
}else if(this.age){
    this.router.navigate(['details'],
    {
         queryParams: 
         {
             age: this.age
         }
     })
}else if(this.sex){
    this.router.navigate(['details'],
    {
         queryParams: 
         {
             sex: this.sex
         }
     })
}

有没有更好的方法重构代码来避免if语句

你可以简单地这样做,:

this.router.navigate(['details'],
{
     queryParams: 
     {
         id: this.id || null,
         age: !this.id && this.age || null,
         sex: !this.id && !this.age && this.sex || null
     }
 });

以上就是结果。