首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我在角2中使用警卫子路由时,浏览器完全阻塞。

当我在角2中使用警卫子路由时,浏览器完全阻塞。
EN

Stack Overflow用户
提问于 2017-04-21 08:59:47
回答 1查看 1K关注 0票数 1

当我在‘RoleGuard’的‘预收获’子路径中使用并打开浏览器时,浏览器被完全阻塞了,这似乎是一个无限循环。我没有任何编译问题,也无法打开控制台查看我有哪些错误。

是否可以在子路径中使用canActivate?还是我应该使用CanActivateChild?我对CanActivateChild没有这个问题。

代码语言:javascript
复制
const preHarvestRoutes: Routes = [
  {
    path: '',
    component: PrivateComponent,
    canActivate: [AuthGuard],
    children: [
      {
        path: 'pre-harvest',
        component: PreHarvestComponent,
        canActivate: [RoleGuard],  <------- IF I REMOVE THIS I DO NOT HAVE ANY PROBLEM.
        children: [
          {
            path: 'new-field',
            component: NewFieldComponent
          },
        ]
      }
    ]
  }
];

RoleGuard:

代码语言:javascript
复制
import { Injectable } from '@angular/core';
import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { UserRolesService } from '../services/user-roles.service';
import { webStorage } from "../utils/web-storage";

@Injectable()
export class RoleGuard implements CanActivate    {

    constructor(
        private userRoles: UserRolesService
        , private router: Router
    ) { }

    canActivate( route: ActivatedRouteSnapshot, state: RouterStateSnapshot )    {
        //let roles = route.data['roles'] as Array<string>;
        //let rolesUserLogged = webStorage.user;

        this.router.navigate( ['pre-harvest'] );

        return true;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-21 09:27:11

您将重定向到与放置RoleGuard的位置相同的路径。这显然会导致无限循环。您应该将RoleGuard更改为:

代码语言:javascript
复制
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
   //let roles = route.data['roles'] as Array<string>;
   //let rolesUserLogged = webStorage.user;
   return true;
}

您仍然必须指定您的RoleGuard逻辑,但是您面临的问题是重定向到相同的路由。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43538291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档