【发布时间】:2019-04-22 01:11:58
【问题描述】:
我正在尝试根据我的角色(当我登录时)加载一个 Angular 模块。我用 Angular Guard 尝试过,但它不起作用,当它失败时,它不会转到下一条路线。
const routes: Routes = [
{
path: '',
loadChildren: () => AuthModule
// Load when not logged in
},
{
path: '',
loadChildren: () => AdminModule
// Load when admin
},
{
path: '',
loadChildren: () => CrewModule
// Load when crew
}
];
关于如何解决这个问题的任何想法?我认为 Angular Guard 或使用匹配器不是解决此问题的正确方法...
编辑:对于每个路径/模块,我都有自己的警卫,如下所示:
import { Injectable } from '@angular/core';
import { CanLoad, CanActivate, Route, Router } from '@angular/router';
import { AuthService } from '@app/core';
@Injectable()
export class AdminModuleGuard implements CanLoad {
constructor(private authService: AuthService, private router: Router) {}
canLoad(route: Route): boolean {
const url: string = route.path;
console.log('Admin Module Load Guard - Url:' + url);
return false;
}
}
谢谢!
亲切的问候, 亚尼克
【问题讨论】:
-
你究竟为你的 Guard 实现了什么逻辑?我认为您可以为这两个模块指定两条不同的路线,然后根据用户在保护逻辑本身中的角色导航到特定的路线。
-
绝对 Angular Guard 是解决这个问题的方法,它就是这样做的:angular.io/guide/router#milestone-5-route-guards
-
@SiddAjmera 与其中一名警卫一起编辑帖子
-
@fmontes 但是当第一个守卫失败时,假设“AuthModule”不会检查下一个守卫是通过还是失败。我说的对吗?
-
所以在你的情况下,它会检查用户是否登录,然后检查它的管理员或工作人员,对吗?如果是这种情况,您可以为 admin 和 admin 创建一个守卫,该守卫可以使用一个服务,该服务将首先检查用户是否登录,然后检查它具有什么角色,有几个关于这个基于角色的守卫的教程,但这里有一个: blogs.msdn.microsoft.com/premier_developer/2018/03/07/…
标签: angular routing lazy-loading