如果我的解决防护失败,我想显示404页面/组件,但我不希望更改浏览器的URL。
我可以通过执行以下操作导航,而无需更改解析中的网址here:
this.router.navigate(['/404'], { skipLocationChange: true })
这适用于从应用内部获得此警卫。但是,如果我直接导航到该页面,例如/posts/1234
,路由器会将URL更改为回退路由(认为404组件已正确显示)。如果我不跳过位置更改,一切都按预期工作,但我的网址中有'/ 404',我不想要。
目前有没有办法通过路由器实现这一目标,还是一个bug?
答案 0 :(得分: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));
<...>
}