ng2-перевод в CoreModule
В нашем приложении Angular есть функциональные модули, а также основной и общий модули, как описано в рекомендациях структуры Angular - linkStyle.
Мы используем ng2-translate
и согласно документу, мы должны позвонить forRoot()
в модуле приложения (корневой модуль).
Вот так выглядит наш модуль приложения:
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
BrowserAnimationsModule,
FeatureAModule,
FeatureBModule,
CoreModule,
TranslateModule.forRoot({
provide: TranslateLoader,
useFactory: (createTranslateLoader),
deps: [Http]
})
],
bootstrap: [AppComponent]
})
export class AppModule { }
Поскольку мы хотим перевести наше меню и его часть в основной модуль, нам пришлось импортировать туда модуль перевода, например, так:
@NgModule({
imports: [
TranslateModule
],
exports: [
FormsModule,
MenuComponent,
BreadcrumbComponent
],
declarations: [MenuComponent, BreadcrumbComponent]
})
export class CoreModule {
constructor( @Optional() @SkipSelf() parentModule: CoreModule) {
throwIfAlreadyLoaded(parentModule, "CoreModule");
}
}
Имеет ли это смысл? Должен ли я удалить TranslateModule.forRoot(...)
из модуля приложения и поместить его в импорт основного модуля? Это неправильно?
1 ответ
Если вы читаете документы, то AppModule
будет единственным для импорта CoreModule
, Если это так, все будет работать нормально, если вы просто добавите TranslateModule.forRoot()
в CoreModule.imports
массив и TranslateModule
в CoreModule.exports
массив. Тогда в вашем AppModule
все, что вам нужно сделать, это импортировать CoreModule
без необходимости иметь дело с модулем перевода снова.
Это похоже на то, как документы предлагают интегрировать RouterModule
например. Посмотрите на это. Заметить, что RouterModule.forRoot()
импортируется в AppRoutingModule
, но не в AppModule
сам. Так что на вашем месте я бы имел:
CoreModule
// forRoot is OK here because AppModule is the only one to import CoreModule
imports: [TranslateModule.forRoot(...)]
// will make Translate available to AppModule
exports: [TranslateModule]
AppModule
//importing Core will import Translate and its services provided by .forRoot()
imports: [CoreModule]
SharedModule
//only if the components, directives and pipes of SharedModule need Translate
imports: [TranslateModule]
//so that all modules that import SharedModule will have Translate access
exports: [TranslateModule]