我正在使用带有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
因此,您可以看到品牌和鳍片部分正常工作,但体积和长度没有正确显示。嵌套的卷和长度对象是什么导致查询字符串错误?感谢您的帮助,我非常感谢。
答案 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发送