angular - 查询 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
因此,您可以看到品牌和鳍部分工作正常,但体积和长度却不正确。嵌套的体积和长度对象是导致查询字符串错误的原因吗?感谢您的帮助,我真的很感激。
解决方案
它将音量和长度参数转换为 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
推荐阅读
- javascript - JQuery mouseleave 函数快速返回而不是转换?
- html - 有没有其他方法来定位绝对元素?
- python - ValueError:字符串格式说明符中不允许“=”对齐
- javascript - 如何在通过 JavaScript 克隆 html 元素后清除输入字段并选择字段?
- excel - VBA 代码覆盖保护设置 - 任何想法
- react-native - 命令失败:在 React-Native 中安装导航、firebase、图标等依赖项时出现 gradlew.bat installDebug 错误
- android - 将 Android Studio 配置为在文件打开时将一种格式应用于代码,在文件保存时将另一种格式应用于代码
- python - 如何平衡(过采样)PyTorch 中的不平衡数据(使用 WeightedRandomSampler)?
- php - 为什么将隐藏的输入标签放在 HTML5 DOCTYPE 声明之上
- gradle - 使用 Gradle 时如何阻止 IntelliJ IDEA 忘记忽略的目录?