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
模块所属的包?捆绑包是在编译时而不是运行时生成的。如果您能解释您的确切需求,那么给出答案就更容易了。