在CoreModule中使用ng2-translate

时间:2017-06-24 15:25:31

标签: angular angular-cli ng2-translate

在我们的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(...)并将其放在核心模块导入中吗?这是错的吗?

1 个答案:

答案 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]