Cul*_*tes 10 lazy-loading ngx-translate angular angular7
可能是最常见的问题之一,而我发现的文档和其他一些问题试图为我解决问题,但是我仍然不确定如何解决此问题。
这是我的结构:
应用模块
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 { }
Run Code Online (Sandbox Code Playgroud)
CountrySelectorModule
@NgModule({
declarations: [CountryselectorComponent],
imports: [
CommonModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient]
}
})
],
exports: [
CountryselectorComponent
]
})
export class ContrySelectorModule { }
Run Code Online (Sandbox Code Playgroud)
选择模块:
@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 { }
Run Code Online (Sandbox Code Playgroud)
现在的问题是,我不想在延迟加载的模块中再次进行语言配置,因为国家/地区选择器模块已经解决了这一问题。我现在不确定如何正确配置延迟加载的模块(并且实际上不确定countrySelectorModule是否正确完成)。使用标准的github文档,我无法做到这一点。.forChild()到目前为止,我已经尝试过弄乱但没有运气。
我需要共享模块吗?我是否需要在任何地方导入countrySelectorModule(不推荐)?定制装载机?tbh我不知道,对于更高级的场景,文档太短了。
Cul*_*tes 14
我通过执行以下操作解决了这个问题:
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]
}
}
}
Run Code Online (Sandbox Code Playgroud)
因此,这可以确保为每一个模块导入CoreModule,TranslateModule将使用相同的配置。确保将其导出。该forRoot()还解决了确保ShoppingCartService和AccountService只有一个实例,不是每个懒惰模块创建一个单独的服务。
应用模块
@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 { }
Run Code Online (Sandbox Code Playgroud)
由于AppModule是您的主要切入点,因此forRoot()请在此处致电TranslateModule
CoreModule而无需任何方法调用。同样CountrySelectorModule在我的示例中,必须仅导入CoreModule而没有其他内容。| 归档时间: |
|
| 查看次数: |
2889 次 |
| 最近记录: |