Хэш (#) в 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 динамически во время выполнения.

Другие вопросы по тегам