我正在创建一个 angular2 应用程序。
export const routes: Route[] = [
{path: '',redirectTo: "login",pathMatch: "full" },
{path: 'login', component: LoginComponent },
{path: 'dashboard', component: DashboardComponent,canActivate:[AuthGuard], children:
[
{ path: '', redirectTo: 'dashboard', pathMatch: 'full' },
{ path: 'A', component: AComponent },
{ path: 'B', component: BComponent },
{ path: 'C', component: CComponent },
{ path: 'D', component: DComponent },
]
}];
当我使用 LoginComponent 登录我的应用程序时,它将转到具有四个子组件的 DashboardComponent
- -一个
- -B
- -C
- -D
现在,我默认将 redirectTo 设置为我的仪表板组件。但代替此重定向,我想根据登录类型(例如他是管理员、超级管理员、学生或教师)重定向到路由 A、B、C、D。
认为
如果登录用户是“管理员”,他应该重定向到->仪表板/A
如果登录用户是“老师”,那么他应该重定向到 - >dashboard/B
我已经像这样创建了 authGuard
@Injectable()
export class AuthGuard implements CanActivate {
constructor(public router: Router){ }
canActivate(){
if(localStorage.getItem('userData')){
return true;
}
// this.router.navigateByUrl('/');
return false;
}
}
export class activateEmployee implements CanActivate {
constructor(){ }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){
console.log(localStorage.getItem('userData'), "employee");
if(localStorage.getItem('userData') == 'superadmin'){
return true;
}
// this.router.navigateByUrl('/');
return false;
}
}
export class activateSuperAdmin implements CanActivate {
constructor(public router: Router){ }
canActivate(){
console.log(localStorage.getItem('userData'), "Superadmin");
if(localStorage.getItem('userData') == 'superadmin'){
return true;
}
return false;
}
}
export class activateAdmin implements CanActivate {
constructor(public router: Router){ }
canActivate(){
console.log(localStorage.getItem('userData'),"Admin");
if(localStorage.getItem('userData') == 'admin'){
return true;
}
return false;
}
}
PS:我的主要目标是保护路线,如果有人知道受保护路线的 URL,即使他无法去那里。或者我们可以说我想要一个服务中的多个 authGuard 之类的东西。
更新
现在我已经为路由创建了不同的类,但是我收到了这个错误,不知道为什么?错误是
Can't resolve all parameters for activateAdmin: (?).