URL 中的哈希 (#) - Angular

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

我有一个 Angular 14 应用程序,它在 URL 中使用 HashLocationStrategy - #(示例:https://localhost:4200/#/agenda?data=2023-03-22)。

我的一些客户曾尝试在 Instagram 上发布故事,但 Instagram 从哈希 (#) 中“剪切”了 URL,将其保留为 https://localhost:4200/。

我想切换到 PathLocationStrategy,没有哈希(示例:https://localhost:4200/agenda?data=2023-03-22)。

但是,我已经有很多客户使用 URL WITH HASH 了。

是否可以让我的应用程序接受带和不带哈希的 URL?

或其他解决方案?

谢谢。

我的应用程序接受带哈希和不带哈希的 URL。

angular url hash-location-strategy
1个回答
0
投票

LocationStrategy 用于配置位置服务以在浏览器 URL 的哈希片段中表示其状态。

所以这意味着:你不能。它是一个注入的服务,您不能在运行时更改它。但你可以做的是:

我的意见是:不要混用。但如果你必须这样做,这里有一个解决方案:

在您的应用程序组件中

export class AppComponent implements OnInit {
    constructor (private router: Router) { }

    ngOnInit() {
      this.router.events.subscribe(event => {
        if (event instanceof NavigationStart) {
          if (!!event.url && event.url.match(/^\/#/)) {
            this.router.navigate([event.url.replace('/#', '')]);
          }
        }
      });
    }
}

原来的答案是here。使用此代码,您可以替换#,也可以不替换。你想要什么。

注意...我知道..

我知道一开始看起来有点老套。但是没有办法(如果是的话也没有好的方法)在运行时动态地改变 Angular 中的

LocationStrategy

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