Angular Typescript只有在它们不为空时才发送可选的restl url params

时间:2018-06-09 09:20:55

标签: javascript angular rest typescript parameter-passing

我控制的当前系统只是Angular 5的前端(因此是Typescript)。后端应该没关系,但有一个团队,他们不会改变他们的签名,他们的错误处理等。:/

问题是有一个搜索屏幕,其中只需要一个字段,所以当我尝试将一个URL发送到Restful后端时(实际上当我输入这个......这不是很安静,是吗?)

我的角色服务方法:

getSearchByUserResults(first,last,user,eff,term,emp) {

       //IF I JUST DO THIS, THEN EMPTY PARAMS ARE SENT AND SOMEHOW THE BACKEND IS NOT SET UP TO HANDLE THAT  :/ 
       //var params = "userid=" + user + "&first-name=" + first + "&last-name=" + last + "&eff-date=" + eff + "&term-date=" + term + "&employee-id=" + emp;

    //Sending only userid works
    //var params = "userid=" + user;

    // Send user and first when first name is empty(null) again it does NOT work
    var params = "userid=" + user + "&first-name=" + first;



    var searchUser = this._searchByUser + params;


    return this._http.get(searchUser).map((response: Response) => response.json()).catch(this.handleError);
}
  

基本上我所展示的是上面的评论。

如果param为空或为null,那么我不希望将它添加到发送到服务器控制器方法的params列表中......

  1. 如果用户= 123发送http://server.com:9080//rest/config/users?userid=123
  2. 如果用户和名字不为空,则发送http://server.com:9080//rest/config/users?userid=123&first-name=Ted
  3. 永远不要发送像空的名字http://server.com:9080//rest/config/users?userid=123&first-name=
  4. 这样的空参数

    根据params列表,如果没有一堆if语句检查null / empty / undefined,我怎么能这样做呢?

    first,last,user,eff,term,emp

1 个答案:

答案 0 :(得分:2)

事实证明,我误读了文档,HttpParams不会自动删除空值。

但是,您可以使用数组函数:

getParams(first,last,user,eff,term,emp): HttpParams {
    let obj = {first, last, user, eff, term, emp};
    return Object.keys(obj).reduce((params, key) => 
            obj[key] ? params.append(key, obj[key]) : params, new HttpParams())
}

这将构建一个仅包含真值的HttpParams对象,因此它会排除null / undefined /空字符串等。

请记住,false0也是假名 - 我不确定这是否会成为您使用案例中的问题。