我正在开发具有两个应用程序(应用程序A,应用程序B)的项目。两个应用程序都使用大约100个组件。因此,我创建了一个Angular库,并在Modules中组织了这些组件。一切正常。当我需要将环境传递给库中的模块时,我陷入了困境。
@NgModule({
imports:[
LibModule2, // need to pass environment from LibModule1
LibModule3,
]
})
export class LibModule1{
export function forRoot(environment):ModuleWithProviders{
return {
ngModule:LibModule1,
providers:[
{provider:ENV, useValue:environment}
]
}
}
}
//App1
@NgModule({
imports:[
LibModule1.forRoot(environment)
]
})
export class AppModule(){}
我仅在应用程序中需要LibModule1。但是还需要将环境传递给LibModule2,LibModule3。我怎样才能做到这一点?我是否以错误的方式处理它?
export class Lib1Module {
static forRoot(config: any): ModuleWithProviders {
return {
ngModule: Lib1Module,
providers: [{provide: 'config', useValue: config}]
};
}
}
export class Lib2Module {
static forRoot(config: any): ModuleWithProviders {
return {
ngModule: Lib2Module,
providers: [{provide: 'config', useValue: config}]
};
}
}
然后将environment
从app.module
传递到Lib1Module
和Lib2Module
,如下所示:
imports:[
CommonModule,
BrowserAnimationsModule,
ReactiveFormsModule,
HttpClientModule,
RouterModule,
BrowserModule,
FormsModule,
GigLib1Module.forRoot(environment),
GigLib2Module.forRoot(environment)
]
现在,将environment
文件注入到您的库中。
使用方法:
environment :any constructor(@Inject('config') config) { if (config) { this.environment = config; } }
现在可以从主项目轻松更改环境。