可能是最常见的问题之一,而我发现的documentation和某些other questions试图为我解决问题,但我仍然不确定如何解决此问题。
这是我的结构:
AppModule
export function HttpLoaderFactory(http: HttpClient) {
return new TranslateHttpLoader(http);
}
@NgModule({
declarations: [
AppComponent
],
imports: [
HttpClientModule,
BrowserModule,
AppRoutingModule,
ContrySelectorModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient]
}
})
],
export class AppModule { }
CountrySelectorModule
@NgModule({
declarations: [CountryselectorComponent],
imports: [
CommonModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient]
}
})
],
exports: [
CountryselectorComponent
]
})
export class ContrySelectorModule { }
选择模块:
@NgModule({
declarations: [SelectionComponent],
imports: [
CommonModule,
SelectionRoutingModule,
UspblockModule,
TranslateModule.forChild({//or forRoot, no idea how to configure this
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient]
}})
],
})
export class SelectionModule { }
现在的问题是,我不想在延迟加载的模块中再次进行语言配置,因为国家/地区选择器模块已经解决了这一问题。我现在不确定如何正确配置延迟加载的模块(并且实际上不确定countrySelectorModule是否正确完成)。使用standard github documentation,我无法做到这一点。我已经尝试过.forChild()
,但到目前为止还没有运气。
我需要共享模块吗?我是否需要在任何地方导入countrySelectorModule(不推荐)?定制装载机?时我不知道,对于更高级的方案来说,文档太短了。
答案 0 :(得分:2)
我通过以下操作解决了这个问题:
CoreModule
(基本上是一个共享模块)CoreModule
export function HttpLoaderFactory(http: HttpClient) {
return new TranslateHttpLoader(http);
}
@NgModule({
declarations: [],
imports: [
CommonModule,
TranslateModule.forChild({
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient]
},
isolate: false
}),
],
exports: [TranslateModule],
})
export class CoreModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: CoreModule,
providers: [ShoppingCartService, AccountService]
}
}
}
因此,这确保了对于每个导入CoreModule
的模块,TranslateModule
将使用相同的配置。确保将其导出。 forRoot()
还解决了确保ShoppingCartService
和AccountService
只是一个实例,而不是每个惰性模块都创建单独服务的问题。
AppModule
@NgModule({
declarations: [
AppComponent
],
imports: [
HttpClientModule,
BrowserModule,
AppRoutingModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient]
},
isolate : false
}),
CoreModule.forRoot(),
ContrySelectorModule,
],
providers: [ ],
bootstrap: [AppComponent]
})
export class AppModule { }
由于AppModule
是您的主要入口点,因此请在此处forRoot()
调用TranslateModule
CoreModule
而无需任何方法调用。同样,在我的示例中,CountrySelectorModule
只需要导入CoreModule
即可。