【问题标题】:Angular 4 resolve guard redirect without changing URL?Angular 4 在不更改 URL 的情况下解决保护重定向?
【发布时间】:2018-04-07 02:18:36
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: angular typescript angular-router-guards


    【解决方案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));
       <...>
    }
    

    【讨论】:

    • 确实,我们最终正在做这样的事情。但很遗憾,这个问题还没有解决
    猜你喜欢
    • 1970-01-01
    • 2012-05-22
    • 2013-08-11
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多