我有一个 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。
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
。