首页 > 解决方案 > 查询 fromObject 中的范围

问题描述

我正在使用具有 4 个选项的动态表单,您可以使用任何选项组合。2 正在寻找字符串匹配,2 正在寻找一定范围内的数字值(gte,lte)。如果单独使用前 2 个可以正常工作,但我无法处理某个范围内的数字。我很感激任何帮助,如果有更好的方法,我会全力以赴。

如果我使用所有选项,我的表单会创建一个像这个例子一样的对象

{
 brand:"Stamps",
 fins:"fcs-2",
 volume:{$gte:26.6, $lte:31.6},
 length:{$gte:65, $lte:76}
 }

这是作为参数发送到这里

getFilteredBoards(searchParams): Observable<Board[]> {
const params = new HttpParams({ fromObject: searchParams });
return this.http.get<Board[]>(this.surfSwapUrl, { params });
}

正在生成的查询字符串如下所示

 /boards?brand=Stamps&fins=fcs2&volume=%5Bobject%20Object%5D&length=%5Bobject%20Object%5D

因此,您可以看到品牌和鳍部分工作正常,但体积和长度却不正确。嵌套的体积和长度对象是导致查询字符串错误的原因吗?感谢您的帮助,我真的很感激。

标签: angular

解决方案


它将音量和长度参数转换为 URL 中的字符串。JS 对象的字符串是“Object [Object]”,这正是您得到的。您不能在 URL 中使用对象,而是单独传递对象属性。

您也可以考虑使用流行的qs npm 模块,它处理嵌套对象,您可以在其中执行以下操作:

var qs = require('qs');

const obj = {
  brand:"Stamps",
  fins:"fcs-2",
  volume:{$gte:26.6, $lte:31.6},
  length:{$gte:65, $lte:76}
}

qs.stringify(obj);
// returns brand=Stamps&fins=fcs-2&volume%5B%24gte%5D=26.6&volume%5B%24lte%5D=31.6&length%5B%24gte%5D=65&length%5B%24lte%5D=76

推荐阅读