由于共享服务,导入相同的模块两次

时间:2018-04-02 18:03:32

标签: angular typescript import module export

如果我在Angular应用程序的主模块中有以下场景会怎样?

在app.module.ts上我使用forRoot()导入模块TranslateModule来配置它并使其可用于所有应用程序。在shared.module.ts中,我导出该模块,以便其他模块可以使用它。在shared.module.ts中我也导出服务,所以我创建了forRoot()方法并将其导入app.module.ts。

这样我两次导入TranslateModule。一个直接在app.module.ts中使用forRoot表单,另一个通过shared.module.ts。这样做有问题吗?如果它存在,怎么解决?

app.module.ts

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    NgbModule.forRoot(),
    ComponentsModule,
    DashboardModule,
    OtherModule,
    HttpClientModule,
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: HttpLoaderFactory,
        deps: [HttpClient]
      }
    }),
    SharedModule.forRoot()
  ],
  providers: [],
  bootstrap: [AppComponent]
})

shared.module.ts

@NgModule({
  imports: [
    CommonModule
  ],
  declarations: [],
  exports: [
    TranslateModule
  ]
})
export class SharedModule {
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: SharedModule,
      providers: [CounterService]
    };
  }
}

1 个答案:

答案 0 :(得分:1)

上述方法应该可以正常工作。如上所述,不会有任何问题。

使用ngx-translate配置 app.module.ts 后,您可以使用ngx-translate存储库中提到的shared.module在其他模块上实现,那么您无需担心导入每次翻译模块。您只需要在shared.module中添加它:

详细了解 this.