如果电子邮件中的链接包含带Query-Param的绝对URL-Path,则Angular会对此进行解码。
菜单导航以这种方式工作<a [routerLink]="node.application.path" [queryParams]="{ reiter: node.application.argument}" (click)="onClickLink(node)">{{ node.name }}</a>
结果是一个像这个例子的链接:http://localhost:4200/#/service/wissen/content/74433?reiter=74427
在重新加载页面时,这将编码为:http://localhost:4200/#/service/wissen/content/74433%3Freiter%3D74427
电子邮件中的链接相同
我哪里错了?
我相信这是你的路由器模块使用HashLocationStrategy的结果,这在#
之后的网址中的http://localhost:4200/
就很明显了。
URL的hash fragment被视为字符串,因此被编码。它不被视为Angular正在处理它(包含路径和后续查询参数)。
为了解决这个问题,您只需更改路由器模块的位置策略即可:
RouterModule.forRoot(
appRoutes,
{ useHash: false } // <-- will not use HashLocationStrategy
)
如果您无法更改此设置(您的配置/部署将不允许),那么您将无法使用Angular从其路由器提供的表示。否则,您可以简单地绑定到href
属性并在组件逻辑中执行URL构造。这样,无论您的URL的路由器构造结果如何,您都可以使用decodeURI()
或decodeURIComponent()
来显示原始URL。