Angular : 使用服务有条件地导入模块

Angular : using a service to conditionnally import modules

我有我用来加载模块列表的服务:

@Injectable()
export class MyService {

  public allowedModules: any = this.modulesFilter();

  constructor() {
  }

  public modulesFilter() {
    const testPef = true;
    const modulesList= [];
    if (testPef === true) {
      modulesList.push(MyFirstModule);
    } else {
      modulesList.push(MySecondModule);
    }
    return modulesList;
  }
}

然后在我的模块文件中,我想这样使用它:

@NgModule({
  imports: [
    CommonModule,
    MyService.allowedModules  // THIS IS WRONG
  ],
  declarations: [],
  providers: [
    MyService
  ],
  exports: [
  ]
})
export class MyModule { }

当然这是错误的,因为我不需要直接访问我的服务

有什么建议吗?

您可以使用 canLoad guard along with LazyLoading。可以从 canLoad

调用您的服务

你使用 lazyLoading 实现了

 export class LoadGuard implements CanLoad {
  constructor(private myService : MyService , private router: Router) {
 }
 canLoad(route: Route): boolean {

  if (this.myService.canBeLoaded()) {
       return true; 
 } else {
    return false;
 }  
} 


{
  path: 'test',
  loadChildren: 'app/test/test.module#TestModule',
  canLoad: [LoadGuard]
},