【问题标题】:How to keep query parameters in angular 5 on all routes by default?默认情况下,如何在所有路由上将查询参数保持在 Angular 5 中?
【发布时间】:2018-06-08 06:56:49
【问题描述】:

背景:

用户使用参数调用应用程序的url并使用我的应用程序。在不同路由之间切换时,url 参数应该在浏览器的地址栏中保持可见。


我必须在我的应用程序的每个路由上保留查询参数。这意味着如果我有网址

www.example.com/app/test?id=326748798342&state=1

并用[routerLink]="['/login']" 调用链接我必须得到这个网址:

www.example.com/app/login?id=326748798342&state=1.

默认情况下,我得到不带参数的登录路由。我找到了一种设置queryParamsHandling='merge' 的解决方案。但这是一个非常糟糕的解决方案,因为这意味着要更改模板中的所有链接和所有 navigate() 调用。

默认情况下有没有更简洁的方法来解决这个问题?在应用程序的路由数组中设置 queryParamsHandling 之类的东西吗?

【问题讨论】:

  • 您是否将 idstate 查询参数传递给 api 或其他组件?
  • 在本例中,“test”和“login”都是应该能够读取查询参数的组件。我没有将参数传递给 api。
  • 我不确定我是否真的了解问题所在。但是,我认为您可以将 Idstate 放入 localstorageServicengrx Store 并检索它以在您的组件中使用,甚至无需添加到 Url。
  • 谢谢,但您的建议并不能解决我的问题。用户使用参数调用我的应用程序的 url 并使用我的应用程序。在不同路由之间切换时,url 参数应该在浏览器的地址栏中保持可见。

标签: angular typescript angular-routing


【解决方案1】:

目前没有办法全局设置。使用queryParamsHandling 似乎是唯一的选择:

<a [routerLink]="['/login']" queryParamsHandling="preserve"></a>

或者在使用路由器时:

router.navigate('/login', { queryParamsHandling: "preserve" })

queryParamsHandling 的另一个可能选项是merge

【讨论】:

  • 那是我在上面的帖子中已经写过的内容。我想全局设置。
  • @geronimo678,我明白了,我只是想回答,目前无法在全局范围内设置它,通过routerLinknavigate 传递queryParamsHandling 是现在唯一的选择。当然,您可以实现自己的routerLink 变体或装饰Router,但这似乎不是一个好方法
  • 感谢您的帮助。看来我必须使用这个唯一的解决方案。或许未来会有更好的解决方案……
  • @geronimo678,我会更新答案,如果我遇到一个会告诉你
  • 我将通过创建一个为 routerLink 生成 url 的服务来解决问题。例如routerLink=urlService.getLink(['login']) 该服务函数将处理 url 查询参数的合并、保留和/或删除
猜你喜欢
  • 2023-02-06
  • 2019-10-02
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
  • 2013-07-04
  • 2018-05-18
相关资源
最近更新 更多