Я решил это, выполнив следующее:
- Создайте
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:
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
и ничего больше.