おそらく最も一般的な質問の1つですが、 ドキュメント といくつかの その他の質問 は、問題を解決しようとしていることがわかりましたが、これを修正する方法がわかりません。
これが私の構造です:
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が正しく行われているかどうかはわかりません)。 標準のgithubのドキュメント を使用することはできませんでした。私は.forChild()
をいじってみましたが、今のところうまくいきません。
共有モジュールは必要ですか? countrySelectorModuleをどこにでもインポートする必要がありますか(推奨されません)?カスタムローダー? t.b.h.私にはわからないので、ドキュメントはより高度なシナリオでは少し短いです。
私はこれを次のようにして解決しました:
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
が1つのインスタンスにすぎず、別のサービスを作成するすべての遅延モジュールではないことを確認して解決しました。
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
のみをインポートする必要があり、それ以外は必要ありません。