如果电子邮件中的链接包含带有Query-Param的绝对URL路径,则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
与电子邮件中的链接相同
我在哪里错了?
答案 0 :(得分:0)
我相信这是您的路由器模块使用HashLocationStrategy的结果,在#
之后,URL中的http://localhost:4200/
就是明显的证明。
URL的hash fragment被视为字符串,因此被编码。不会像Angular那样对待它(包含路径和后续查询参数)。
为了解决此问题,您可以简单地更改路由器模块的定位策略:
RouterModule.forRoot(
appRoutes,
{ useHash: false } // <-- will not use HashLocationStrategy
)
如果您无法更改此设置(您的配置/部署将不允许这样做),那么您将被Angular从其路由器提供给您的表示所困扰。否则,您可以简单地绑定到href
属性,并在组件逻辑中进行URL构造。这样,无论URL路由器构造的结果如何,您始终可以使用decodeURI()
或decodeURIComponent()
来显示原始URL。