我正在尝试根据我的角色加载 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;
}
}
Thanks!
亲切的问候,
亚尼克
您可以通过使用根模块来完成此任务Injector
访问您的AuthService
实例,然后根据用户的角色异步决定加载一个模块或另一个模块。您可以访问Injector
在你的引导之后立即main.ts
文件,然后发布为 RxJs 主题(例如 mySubject$),然后在路由定义中使用该主题。
// Get root module's injector and publish it via RxJs subject
platformBrowserDynamic()
.bootstrapModule(AppModule)
.then((m) => mySubject$.next(m.injector)) // <-- here
.catch((err) => console.error(err));
您可以在以下位置找到此方法的工作示例斯塔克闪电战 https://stackblitz.com/github/gulsharan/lazy-loaded-modules-for-same-route
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)