在fromObject中查询范围

时间:2018-09-20 13:28:14

标签: angular

我正在使用带有4个选项的动态表单,您可以使用任何选项组合。 2正在寻找字符串匹配项,2正在寻找一定范围内的数字值(gte,lte)。如果单独使用前两个,效果很好,但是我无法处理范围内的数字。感谢您的帮助,如果有更好的方法,我将不胜感激。

如果我使用所有选项,那么我的表单会创建一个类似于此示例的对象

{
 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

因此,您可以看到品牌和鳍片部分正常工作,但体积和长度没有正确显示。嵌套的卷和长度对象是什么导致查询字符串错误?感谢您的帮助,我非常感谢。

2 个答案:

答案 0 :(得分:1)

其将volume和length参数转换为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

答案 1 :(得分:0)

体积和长度是对象,但是您不能将对象作为queryParam发送