2

我在警卫路由方面遇到了一些奇怪的问题。情况如下:页面 A 上有一个守卫,守卫检查它是否拥有可以访问该页面的所有内容。如果不是,它将重定向到页面 B 以获取例如选择客户端所需的一切。当该用户在没有正确信息的情况下导航回页面 A 时,它会被重定向回页面 B。这就是一切出错的地方,因为不允许用户转到页面 AI 从守卫返回 false 并进行重定向。但是我的商店说路线是页面 A,但是因为我拒绝导航,所以我仍然在页面 B 上。

这种情况在代码中如下所示:

警卫

canActivate(route: ActivatedRouteSnapshot,
              state: RouterStateSnapshot): boolean {

    if (got_what_i_need) {
      return true;
    } else {

        this.store.dispatch(new RouterActions.Go({
          path: ['pageB']




    }
    return false;

  }

路线

const appRoutes: Routes = [
  { path: RoutePaths.pageA, loadChildren: './pageA', canActivate: [PortalDetectionGuard] },
  { path: RoutePaths.PageB, loadChildren: './pageB'},

有人知道我在这里做错了什么吗?此外,每当我返回 false 时,当前页面也不会被破坏或重新初始化。

提前致谢!

4

1 回答 1

0

尝试使用另一种导航策略:

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
    if (got_what_i_need) {
      return true;
    } else {
      this.router.navigate(['page-B'])
    }
    return false;
}

为此,您需要在 Guard 的构造函数中插入路由器。

  constructor(private navigationService: NavigationService)

如果这不起作用,也许“got_what_i_need”部分是原因。

于 2018-03-28T16:41:16.867 回答