Angular Typescript 仅当它们不为空时才发送可选的 restful url 参数



我控制的当前系统只是前端,即Angular 5(因此打字稿(。 后端应该无关紧要,但有一个团队,他们不会更改签名、错误处理等。 :/

问题是有一个搜索屏幕,其中只需要 1 个字段,所以当我尝试将 URL 发送到 Restful 后端时(实际上当我输入这个时......这不是真正的 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);
}

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

如果参数为空或为空,则我不希望将其添加到发送到服务器控制器方法的参数列表中...

  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=

基于该参数列表,如何在没有一堆 if 语句检查空/空/未定义的情况下做到这一点?

first,last,user,eff,term,emp

事实证明,我误读了文档,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也是错误的值——我不确定这是否会成为您的用例中的一个问题。

最新更新