Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度:使用服务有条件地导入模块_Javascript_Angular_Typescript_Angularjs Scope - Fatal编程技术网

Javascript 角度:使用服务有条件地导入模块

Javascript 角度:使用服务有条件地导入模块,javascript,angular,typescript,angularjs-scope,Javascript,Angular,Typescript,Angularjs Scope,我有一个用于加载模块列表的服务: @Injectable() export class MyService { public allowedModules: any = this.modulesFilter(); constructor() { } public modulesFilter() { const testPef = true; const modulesList= []; if (testPef === true) { mo

我有一个用于加载模块列表的服务:

@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 { }
当然这是错误的,因为我不需要直接访问我的服务


建议?

您可以使用guard和。您的服务可以从
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]
},

我甚至想不出做这件事的正当理由。你能给出一些你想要完成的事情背后的推理/背景信息吗?我想有条件地导入我的模块:我可以从一个我可以调用的web服务中使用testPef值。Angular编译器如何知道如何创建你的
MyModule
模块所属的包?捆绑包是在编译时而不是运行时生成的。如果您能解释您的确切需求,那么给出答案就更容易了。