3

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

我可以在不更改解析中的 URL 的情况下进行导航,如下所述

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

这在从应用程序中访问此警卫时有效。但是,如果我直接导​​航到页面,例如:/posts/1234路由器将 URL 更改为后备路由(认为 404 组件已正确显示)。如果我不跳过位置更改,一切都会按预期工作,但是我的 url 中有我不想要的 '/404'。

目前有没有办法用路由器实现这一点,或者它是一个错误?

4

1 回答 1

5

我面临同样的问题。万一你仍然想解决这个问题,我发现了这个 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));
   <...>
}
于 2018-06-22T18:59:45.530 回答