Angular 4 разрешить перенаправление охраны без изменения URL?

Я хочу отобразить страницу 404 / компонент, если моя защита разрешения не работает, но я не хочу, чтобы URL-адрес браузера изменился.

Я могу перемещаться без изменения URL в разрешении, как описано здесь, выполнив:

this.router.navigate(['/404'], { skipLocationChange: true })

Это работает при получении к этому охраннику из приложения. Однако, если я перейду прямо на страницу, например: /posts/1234 маршрутизатор изменяет URL-адрес на запасной маршрут (при условии, что компонент 404 отображается правильно). Если я не пропускаю изменение местоположения, все работает как положено, но в моем URL-адресе "/404", который я не хочу.

Есть ли способ добиться этого с помощью маршрутизатора в настоящее время, или это ошибка?

1 ответ

Я сталкиваюсь с той же проблемой. В маловероятном случае, если вы все еще хотите решить эту проблему, я обнаружил проблему с Github: https://github.com/angular/angular/issues/16981

Не похоже, что есть законный способ справиться с этим, но есть хороший обходной путь, предложенный Karolis92.

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):     Observable<boolean> {
   <...>
   this.router.navigate(['404']);
   setTimeout(() => this.location.replaceState(state.url));
   <...>
}
Другие вопросы по тегам