使用Angular 2 Location的查询参数构建url

时间:2016-08-08 21:00:09

标签: angular angular2-routing

我已经实现了一个SearchComponent,用户可以在其中修改搜索词和构面等参数,以便过滤掉结果。我希望使用当前选定的参数更新网址,以便用户可以为链接添加书签或电子邮件。

我的问题是将网址更新为包含参数。我知道我应该使用Location服务,特别是go()方法,但我似乎无法弄清楚使用哪种方法来获取参数集合(数组或JavaScript对象)并根据当前LocationStrategy将其转换为格式正确的查询字符串。我是否应该遍历集合并直接连接值以构建单个字符串?

代码段

发布后我继续玩API。据我了解,使用HashLocationStrategy并给出以下网址

#/search

this.location.path(false)的输出是

/search

(作为旁注,this.location.path(true)的输出也是 /search

当我使用Routing将网址更改为

#/search;searchTerms=ftp

this.location.path(false)逻辑(种类)的输出变为

/search;searchTerms=ftp

我有几个值得关注的问题

  1. 如前所述,构建url 似乎要求我连接名称值对,而不是提供一个帮助您处理它的帮助方法。
  2. 现在,给定组件不知道用于实例化所述组件的路由。实际路由取决于您在路由器配置中的内容。但是现在,为了更新路线,我不能只说'#34;将此特定添加到当前路线",我实际上需要从当前网址中提取该前缀以在更新的网址中使用。
  3. 与项目#2相关,我实际上需要从path()返回的值并将其拆分或获取;字符的索引,以便重新使用非参数部分?
  4. 最终,在我看来,基于组件中的更改更新路径的组件似乎非常常见的用例,但API 似乎使它变得非常不方便且手动过程非常丑陋。我希望我错过了一些东西......

1 个答案:

答案 0 :(得分:0)

我的意思是,如果您真的想采用其他方法,可以使用encodeURIComponent(btoa(JSON.stringify(object)))生成查询字符串, JSON.parse(atob(decodeURIComponent(string)))让它回到对象中......

但正如你所说,我推荐循环播放。