我有一个角度应用程序,其中LazyModule延迟加载到应用程序路由模块中
{path:'lazy',loadChildren: './modules/lazy/lazy.module#LazyModule'}
惰性模块包含服务LazyService。此服务包含一种动态创建路由的方法,如下所示
我需要将功能模块DynamicModule用于三种不同的路线,并且使用
addDynamicRoute(data:any){
let route:{};
switch(data.moduleName){
case 'ModuleA':
case 'ModuleB':
case 'ModuleC': route = {
path: 'apps/'+data.moduleName,
loadChildren: ()=>DynamicModule
}
break;
default:
throw Error("Invalid module type")
break;
}
this.router.config.push(route);
this.router.resetConfig(this.router.config);
console.log(this.router.config);
}
DynamicModule.ts如下,其中SampleService作为提供程序
@NgModule({
declarations: [ComponentA],
imports: [
CommonModule,
DynamicRoutingModule //Routing for DynamicModule
],
providers : [SampleService]
})
export class DynamicModule {}
这可行,并且我得到了SampleService的三个实例。
现在,我想从LazyService的addDynamicRoute方法中为SampleService实例传递moduleName,以便每个SampleService实例都具有特定的moduleName。
所以我尝试使用forChild()
loadChildren: ()=>DynamicModule.forChild(data.moduleName)
,并将DynamicModule更改为
@NgModule({
declarations: [ComponentA],
imports: [
CommonModule,
DynamicRoutingModule //Routing for DynamicModule
]
})
export class DynamicModule {
static forChild(moduleName:string): ModuleWithProviders{
console.log(moduleName); //This gets executed
return{
ngModule:DynamicModule,
providers:[SampleService,{provide: 'moduleName', useValue: moduleName}]
};
}
}
SampleService构造函数
constructor(@Inject('moduleName') private mName:string) {
console.log('Instantiated service');
this.moduleName = mName;
}
但这不起作用,并且在尝试导航到/ lazy / ModuleA
时出现错误,未找到“ [object Object]”的NgModule元数据有什么办法做到吗?