如何避免在重新加载时使用参数对网址进行解码

时间:2019-03-29 12:23:30

标签: angular routing url-routing

如果电子邮件中的链接包含带有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

与电子邮件中的链接相同

我在哪里错了?

1 个答案:

答案 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。