如何在重载时避免使用params解码url

问题描述 投票:1回答:1

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

电子邮件中的链接相同

我哪里错了?

angular routing url-routing
1个回答
0
投票

我相信这是你的路由器模块使用HashLocationStrategy的结果,这在#之后的网址中的http://localhost:4200/就很明显了。

URL的hash fragment被视为字符串,因此被编码。它不被视为Angular正在处理它(包含路径和后续查询参数)。

为了解决这个问题,您只需更改路由器模块的位置策略即可:

RouterModule.forRoot(
    appRoutes,
    { useHash: false } // <-- will not use HashLocationStrategy
)

如果您无法更改此设置(您的配置/部署将不允许),那么您将无法使用Angular从其路由器提供的表示。否则,您可以简单地绑定到href属性并在组件逻辑中执行URL构造。这样,无论您的URL的路由器构造结果如何,您都可以使用decodeURI()decodeURIComponent()来显示原始URL。

© www.soinside.com 2019 - 2024. All rights reserved.