【问题标题】:Lazy load modules on same path based on role基于角色在同一路径上延迟加载模块
【发布时间】: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


【解决方案1】:

您可以通过使用根模块的Injector 访问您的AuthService 实例来完成此操作,然后根据用户的角色做出加载一个模块或另一个模块的异步决定。您可以在 main.ts 文件中引导后立即访问 Injector,然后发布为 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));

您可以在 Stackblitz 上找到这种方法的工作示例

【讨论】:

猜你喜欢
  • 2019-09-03
  • 2019-11-27
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-12
  • 1970-01-01
相关资源
最近更新 更多