【问题标题】:Building url with query parameters for Angular 2 Location使用 Angular 2 Location 的查询参数构建 url
【发布时间】:2016-08-08 21:00:09
【问题描述】:

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

我的问题是关于将 url 更新为 include 参数。我知道我应该使用 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. 目前,给定组件不知道用于实例化所述组件的路由。实际路由取决于您在路由器配置中放置的内容。但是现在,为了更新路由,我不能只说“将此特定添加到当前路由”,我实际上需要从当前 url 中提取该前缀以在更新后的 url 中使用。
  3. 与第 2 项相关,我实际上需要获取从 path() 返回的值并将其拆分或获取 ; 字符的索引,以便我可以重新使用非参数部分?

最终,在我看来,根据组件内的更改更新路径的组件似乎是一个非常常见的用例,但 API 似乎 使其非常不方便且是一个丑陋的手动过程。我希望我错过了什么......

【问题讨论】:

    标签: angular angular2-routing


    【解决方案1】:

    我的意思是,如果您真的想采用另一种方法,您可以使用encodeURIComponent(btoa(JSON.stringify(object))) 生成查询字符串并 JSON.parse(atob(decodeURIComponent(string))) 将其重新放入对象中...

    但正如你所说,我建议循环播放。

    【讨论】:

    • 我在修改 url 时遇到的问题不仅仅是构建参数。我更新了帖子以更好地解释我关于位置服务和 API(或缺少...)的所有(相关)问题
    猜你喜欢
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 2018-09-23
    • 2011-11-15
    • 1970-01-01
    • 2016-08-12
    • 2017-12-19
    相关资源
    最近更新 更多