【问题标题】:Importing the same module twice because of the Shared Service由于共享服务,两次导入相同的模块
【发布时间】:2018-09-11 23:14:15
【问题描述】:

如果我的 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]
    };
  }
}

【问题讨论】:

    标签: angular typescript import module export


    【解决方案1】:

    上述方法应该可以正常工作。按照上面的操作不会有任何问题。

    一旦您的 app.module.ts 配置了 ngx-translate,您就可以使用 ngx-translate 存储库中提到的 shared.module 在其他模块上实现,那么您不必担心每次都导入 TranslateModule .你只需要在你的 shared.module 中添加这个:

    this.

    上阅读更多信息

    【讨论】:

    • 但是需要将 TranslateModule 导入到其他使用管道翻译的模块中。这就是我创建 SharedModule 以将其导入其他模块的原因。
    • 对不起,我没有意识到它的 TranslateModule。
    • 执行 SharedModule.forRoot () 会将 TranslateModule 再次导入 app.module.ts。没有任何事情发生,对吧?你的意思是这样,没有问题吗?非常感谢您的回复。
    • 没错,阅读这篇文章medium.com/@lopesgon/…
    • 不,这不是问题,请查看此示例 repo github.com/sajeetharan/angular_web
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-08
    • 2019-04-10
    • 2018-07-11
    • 1970-01-01
    相关资源
    最近更新 更多