【问题标题】:Can I insert a string into a URL only if the string is not empty?只有当字符串不为空时,我才能在 URL 中插入字符串吗?
【发布时间】:2020-05-15 08:18:02
【问题描述】:

我尝试从数据库中获取数据。我可以包含一些可选部分以使搜索更加具体。

我有一个这样的对象:

{
  title: "wonderland",
  aliases: "",
  ...
}

现在我想为 GET-Request 创建一个 URL

getResults(obj){
    return this.http.get(`${this.url}/title=${obj.title}&aliases=${obj.aliases}`)
}

现在我想删除 &aliases=${obj.aliases} 部分,因为正如您在上面看到的,属性别名在这种情况下是空的。 如果属性标题为空,我想删除title=${obj.title}

你会怎么做?

【问题讨论】:

    标签: angular string typescript url get


    【解决方案1】:

    试试这个。比你想做的更好

    let object = {
      title: "wonderland",
      aliases: ""
    }
    
    function addOptionalParameters(urlPath) {
      let count = 0;
    
      for(let param in object){
        if (object[param]) {
          if (count === 0 ) {
            urlPath = `${urlPath}/${param}=${object[param]}`
          } else {
            urlPath = `${urlPath}&${param}=${object[param]}`
          }
          count ++;
        }
      }
    
      return urlPath;
    }
    
    function getResults(obj) {
      let urlPath = `${this.url}`
      urlPath = addOptionalParameters(urlPath)
    
      return this.http.get(`${urlPath}`)
    }
    

    【讨论】:

    • 我有很多可选字符串。我是否必须对每个属性都使用 if 语句?
    • 不,创建一个函数。该函数应接受输入并根据状态追加。我会根据情况更新。
    • @Logik 查看更新版本。此外,您需要确保将对象键用作参数键,否则逻辑将不起作用
    • 嘿,谢谢。我得到了解决方案。它与您使用的方法相同,但唯一的区别是我使用 Object.entries
    【解决方案2】:

    你可以这样做:

    
    getAliasQuery(aliases) {
        if (aliases) return '&aliases=${aliases}';
        return '';
    }
    
    getResults(obj){
        return this.http.get(`${this.url}/title=${obj.title}${getAliasQuery(obj.aliases)}`)
    }
    

    【讨论】:

      猜你喜欢
      • 2013-09-13
      • 1970-01-01
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      相关资源
      最近更新 更多