网站搜索

在 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 中从对象中移除空属性

相关文章