Angular 4解决警卫重定向而不更改URL?

时间:2017-10-25 20:47:41

标签: angular typescript angular-router-guards

如果我的解决防护失败,我想显示404页面/组件,但我不希望更改浏览器的URL。

我可以通过执行以下操作导航,而无需更改解析中的网址here

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

这适用于从应用内部获得此警卫。但是,如果我直接导​​航到该页面,例如/posts/1234,路由器会将URL更改为回退路由(认为404组件已正确显示)。如果我不跳过位置更改,一切都按预期工作,但我的网址中有'/ 404',我不想要。

目前有没有办法通过路由器实现这一目标,还是一个bug?

1 个答案:

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