我控制的当前系统只是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列表中......
根据params列表,如果没有一堆if语句检查null / empty / undefined,我怎么能这样做呢?
first,last,user,eff,term,emp
答案 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
/空字符串等。
请记住,false
和0
也是假名 - 我不确定这是否会成为您使用案例中的问题。