在我们的Angular App中,我们有功能模块以及核心和共享模块,如Angular - linkStyle Structure best practices所述。< / p>
我们使用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(...)
并将其放在核心模块的导入中吗?这是错的吗?
答案 0 :(得分:2)
如果您关注文档,则 import { SocketIoModule, SocketIoConfig } from 'ng-socket-io';
const config: SocketIoConfig = { url: 'http://localhost:8988', options: {} };
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
SocketIoModule.forRoot(config)
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
将是唯一导入AppModule
的人。如果是这样的话,如果您只是将CoreModule
添加到TranslateModule.forRoot()
数组并将CoreModule.imports
添加到TranslateModule
数组,情况就会正常。然后在CoreModule.exports
中,您需要做的就是导入AppModule
,而无需再次处理翻译模块。
这类似于文档建议集成CoreModule
的方式。拿一个look at this。请注意,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]