【发布时间】:2019-03-05 06:47:56
【问题描述】:
我希望我的主页为不同的角色加载不同的模块
const routes: Routes = [
{
path: 'login',
component: LoginComponent,
},
{ path: '', loadChildren: './dashboard/dashboard.module#DashboardModule', canLoad: [AuthGuard], canActivate: [AuthGuard], },
{
path: '',
loadChildren: './dashboard/dashboard.module#DashboardModule',
canActivate: [true]
},
]
这里是AuthGuard
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean> | Promise<boolean> | boolean {
if (localStorage.getItem('ISTRAINER') === Role.Trainer
&& next.routeConfig.loadChildren === './dashboard/dashboard.module#DashboardModule') {
return true;
}
return false;
}
canLoad(route: Route): boolean {
return false;
}
当 canLoad: [AuthGuard] 返回 false 路由器不检查下一条路由
或者有没有办法根据路线改变 loadChildren
实际上我想在登录时实现这一点让我们说 如果学生角色已登录,则在路线“仪表板”或“”学生模块上加载 如果已登录培训师角色,则在路线“仪表板”或“”培训师模块上加载 如果管理员角色已登录,则在路由“仪表板”或“”管理模块加载
【问题讨论】:
-
您可以根据 canActivate 函数内部的条件从 typescript 路由到您的路径。
-
添加了更多解释,请查看
-
那么您将在 dashboard 模块 中拥有 3 个 dashboard 组件?就像学生一样,你有一个学生仪表板,管理员 -> 管理员仪表板,教师 -> 教师仪表板。对于 localStorage 中的任何内容,您将路由到该特定仪表板?这是用例吗?
标签: angular angular-routing angular-route-guards