如何将参数传递给canActivate的构造函数?

OPV*_*OPV 9 angular angular5

我有以下路线路径:

{
    path: 'teacher',
    component: DashboardTeacher, canActivate: [AccessGuardTeacher('Teacher')]
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我尝试在课堂上传递参数“Teacher” AccessGuardTeacher

export class AccessGuardTeacher implements CanActivate {

  constructor(private role: string) {
  }
}
Run Code Online (Sandbox Code Playgroud)

怎么做才对?

小智 15

您的路由应配置为:

{ 
   path: 'teacher', 
   component: DashboardTeacherComponent, 
   canActivate: [AccessGuardTeacher], 
   data: { 
            role: 'teacher'
         } 
}
Run Code Online (Sandbox Code Playgroud)

在您的 CanActivate Guard 中获取您的路线数据

export class AccessGuardTeacher implements CanActivate {

     constructor() {
     }

    canActivate(route: ActivatedRouteSnapshot): boolean {

        const role = route.data.role;
        return true; //based on your condition
    }
}
Run Code Online (Sandbox Code Playgroud)


Val*_*ssi 1

Angular 14+ 解决方案

{
    path: 'edit',
    component: Cmp,
    canActivate: [
      () =>
        inject(Service).hasUserPermissions(['WRITE_SOMETHING'])
          ? true
          : inject(Router).parseUrl('/goSomewhere'),
    ],
  },
Run Code Online (Sandbox Code Playgroud)