在 Angular 中使用 TypeScript 时忽略 GET 请求中设置为 undefined 的属性
我正在尝试从服务器请求一些数据。当我将某个属性的模型更改为 undefined 时,这个“undefined”字符串会被发送到查询字符串中。
let filterModel = new GroupFilterModel();
filterModel.status = anycondition ? "opened" : undefined;
this.http.get<GroupModel[]>("apiurl", { params: filterModel });
发送的查询字符串类似这样:
apiurl?status=undefined
我想避免发送状态变量。我如何才能有这种行为?
答案#1
在 ES6 中使用这一行代码:
Object.keys(obj).forEach(key => obj[key] === undefined ? delete obj[key] : '');
好像:
filterModel.status = anycondition ? "opened" : undefined;
const model = Object.keys(filterModel).forEach(key => obj[key] === undefined ? delete obj[key] : '');
this.http.get<GroupModel[]>("apiurl", { params: model });
你甚至可以更进一步,将其作为对象的扩展:
Object.prototype.StripUndefined = function StripUndefined() {
return this.keys(filterModel).forEach(key => obj[key] === undefined ? delete obj[key] : '');
};
答案#2
你可以使用 lodash 按如下方式移除值为 undefined 和 null 的属性:
let filterModel = new GroupFilterModel();
filterModel.status = anycondition ? "opened" : undefined;
this.http.get<GroupModel[]>("apiurl", { params: _.pickBy(filterModel) });
有关使用原生 JS 的其他解决方案,请参见:
在 Javascript 中从对象中移除空属性
