Angular 4 разрешает перенаправление защиты без изменения URL-адреса?

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

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

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

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

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


person tam5    schedule 25.10.2017    source источник


Ответы (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));
   <...>
}
person user3370237    schedule 22.06.2018
comment
Действительно, мы делаем что-то подобное в конце. Но жаль, что это еще не исправили - person tam5; 22.06.2018