基于角色在同一路径上延迟加载模块

2024-05-25

我正在尝试根据我的角色加载 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(使用前将#替换为@)

基于角色在同一路径上延迟加载模块 的相关文章

随机推荐