我正在使用过滤器,我的过滤器有类别:
现在我在处理多个过滤器方面遇到了一些麻烦。类似的东西:
www.myApp.com/search?query=*&colour=blue&size=medium,large&origin=germany
首先,我想知道是否有关于URL的语法以及是否有标准?例如,这尤其关于size
。在展示网址中,我会显示如下值:size=medium,large
。但有时我会看到网址显示:size=medium&size=large
。
有正确的方法吗?
还有更多我如何在angular2 / 4中处理多个相同的键?似乎this.route.queryParams.subscribe(queryParams => {});
无法检测现有QueryParams中的更改。例如来自:
www.myApp.com/search?query=*&colour=blue&origin=germany
添加size = medium woks:
www.myApp.com/search?query=*&colour=blue&size=medium&origin=germany
但是如果我添加另一个元素,例如:
,则变化检测不会增加www.myApp.com/search?query=*&colour=blue&size=medium,large&origin=germany
答案 0 :(得分:0)
逗号是URL查询中的保留字符。根据标准,但这并不意味着你不能使用它。你只需要先逃避角色。
所以你会写这样的URL:
www.myApp.com/search?query=*&colour=blue&size=medium%2Clarge&origin=germany
在某些情况下,这可能会很痛苦。因此,您可以使用加号+
而不是逗号,因为它不是保留字符。
www.myApp.com/search?query=*&colour=blue&size=medium+large&origin=germany
我看到很多网站使用加号。
Angular可能没有在URL上获取更改检测的原因是因为逗号没有被转义(但这只是我做的假设)。
关于传递多个参数的问题。好吧,没有错误的方法。当涉及到查询参数的结构时,没有关于此的强制规则。
您可以使用任何您想要的网址格式:
www.myApp.com/search?query=*&colour=blue&size=medium+large&origin=germany
www.myApp.com/search?query=*&colour=blue&size=medium&size=large&origin=germany
www.myApp.com/search?query=*&colour=blue&size[]=medium&size[]=large&origin=germany
www.myApp.com/search?query=*&colour=blue&size[0]=medium&size[1]=large&origin=germany
我个人的偏好是做得更容易。如果您正在使用后端服务器。我会遵循甚至在前端服务器所需的模式。这使得模式一致,但如果后端不是问题。我只想使用+
并在需要时拆分参数。