Хэш (#) в URL – Angular
У меня есть приложение Angular 14, которое использует HashLocationStrategy - # в URL-адресе (пример: https://localhost:4200/#/agenda?data=2023-03-22).
Некоторые из моих клиентов пытались публиковать истории в Instagram, но Instagram «вырезал» URL-адрес из хеша (#), оставляя его как https://localhost:4200/.
Я хотел бы переключиться на PathLocationStrategy без хеша (пример: https://localhost:4200/agenda?data=2023-03-22).
Однако у меня уже есть много клиентов, которые используют URL-адрес С ХЕШОМ.
Можно ли заставить мое приложение принимать URL-адреса с хешем и без него?
Или другое решение?
Спасибо.
Мое приложение принимает URL-адреса с хешем и без него.
1 ответ
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('/#', '')]);
}
}
});
}
}
Оригинальный ответ здесь . С помощью этого кода вы можете заменить # или нет. Что вы хотите.
Обратите внимание... Я знаю..
Я знаю, что на первый взгляд это выглядит немного хакерски. Но нет способа (а если и есть, то нет хорошего способа) изменитьLocationStrategy
в Angular динамически во время выполнения.