将 Angular 服务注入到导出的函数中?

Cod*_*n25 3 dependency-injection function typescript angular-services angular

我在 AppComponent 中定义了以下导出函数(类外):

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

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

TranslateModule.forRoot ({
  loader: {
    provide: TranslateLoader,
    useFactory: multiTranslateHttpLoaderFactory,
    deps: [HttpClient]
  }
}),
Run Code Online (Sandbox Code Playgroud)

我需要一种在导出函数中使用我的 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'}
    ]);
  }
}
Run Code Online (Sandbox Code Playgroud)

smn*_*brv 7

没有什么比这更容易的了。

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'}
  ]);
}
Run Code Online (Sandbox Code Playgroud)

并将其作为依赖项传递

TranslateModule.forRoot ({
  loader: {
    provide: TranslateLoader,
    useFactory: multiTranslateHttpLoaderFactory,
    deps: [HttpClient, AuthService]
  }
}),
Run Code Online (Sandbox Code Playgroud)