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));
<...>
}