Angular:将参数传递给NgModule

问题描述 投票:0回答:1

我有使用TranslateModule中的ngx-translate的模块(问题不是关于这个lib的问题,而是关于Angular的问题)。看起来像这样:

@NgModule({
  ...
  imports: [
    TranslateModule.forChild({
      loader: {
        provide: TranslateLoader,
        useFactory: (http: HttpClient) => new TranslateHttpLoader(http, './assets/i18n/todos/', '.json'),
        deps: [HttpClient]
      },
      isolate: true
    })
  ]
})
export class TodosModule {
}

现在有5个看起来像这样的模块。我决定将TranslateModule移至SharedModule。但这是一个问题:我必须分别为每个模块设置路径(例如./assets/i18n/todos)。那就是我发现的:

@NgModule({
  ...
  imports: [
    TranslateModule
  ],
  exports: [
    TranslateModule
  ]
})
export class SharedModule {

  static forChild(i18path: string): ModuleWithProviders {
    return {
      ngModule: SharedModule,
      providers: [
        {
          provide: TranslateModule,
          useValue: TranslateModule.forChild({
            loader: {
              provide: TranslateLoader,
              useFactory: (http: HttpClient) => new TranslateHttpLoader(http, `./assets/i18n/${i18nPath}/`, '.json'),
              deps: [HttpClient]
            },
            isolate: true
          })
        }
      ]
    }
  }

}

但是它不起作用。 TranslateHttpLoader不加载翻译文件。控制台中没有错误。我在做什么错?

angular
1个回答
0
投票

添加:

TranslateModule.forRoot({
  loader: {
    provide: TranslateLoader,
    useFactory: (http: HttpClient) => new TranslateHttpLoader(http, `./assets/i18n/${i18nPath}/`, '.json'),
    deps: [HttpClient]
  }
}),

到app.module。

在您的共享模块中,只需导入和导出TranslateModule:

@NgModule({
  imports: [TranslateModule, ...],
  declarations: [],
  exports: [TranslateModule, ..]
})
export class SharedModule {
© www.soinside.com 2019 - 2024. All rights reserved.