具有相同密钥的多个QueryParams

时间:2017-07-31 16:21:46

标签: angular

我正在使用过滤器,我的过滤器有类别:

  • 颜色
  • 尺寸
  • 来源

现在我在处理多个过滤器方面遇到了一些麻烦。类似的东西:

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

1 个答案:

答案 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

我个人的偏好是做得更容易。如果您正在使用后端服务器。我会遵循甚至在前端服务器所需的模式。这使得模式一致,但如果后端不是问题。我只想使用+并在需要时拆分参数。