将 Angular 服务注入导出函数?

Inject an Angular service into an exported function?

我的 AppComponent 中定义了以下导出函数(class):

export function multiTranslateHttpLoaderFactory(http: HttpClient) {
  return new MultiTranslateHttpLoader(http, [
    {prefix: './assets/i18n/default/', suffix: '.json'},
    {prefix: './assets/i18n/bc/', suffix: '.json'}
  ]);
}

然后以这种方式在 AppModule 的导入数组中使用:

TranslateModule.forRoot ({
  loader: {
    provide: TranslateLoader,
    useFactory: multiTranslateHttpLoaderFactory,
    deps: [HttpClient]
  }
}),

我需要一种在导出函数中使用我的 AuthService 的方法,因为我需要某些属性来实现逻辑。

有可能吗?

例如,我想以这种方式使用我的 authService:

export function multiTranslateHttpLoaderFactory(http: HttpClient) {
  let bc = this.authService.activeBusinessCase$.getValue();
  if(bc){
    ...
  }else{
    return new MultiTranslateHttpLoader(http, [
      {prefix: './assets/i18n/default/', suffix: '.json'},
      {prefix: './assets/i18n/bc/', suffix: '.json'}
    ]);
  }
}

再简单不过了。

export function multiTranslateHttpLoaderFactory(http: HttpClient, auth: AuthService) {
  // add AuthService logic

  return new MultiTranslateHttpLoader(http, [
    {prefix: './assets/i18n/default/', suffix: '.json'},
    {prefix: './assets/i18n/bc/', suffix: '.json'}
  ]);
}

并将其作为依赖项传递

TranslateModule.forRoot ({
  loader: {
    provide: TranslateLoader,
    useFactory: multiTranslateHttpLoaderFactory,
    deps: [HttpClient, AuthService]
  }
}),

除此解决方案外,您还可以使用 Angular 的注入器 API。

Follow the docs here