Внедрить сервис Angular в экспортируемую функцию? - PullRequest
1 голос
/ 07 марта 2019

У меня есть следующая экспортируемая функция (вне класса), определенная в моем AppComponent:

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'}
    ]);
  }
}

Ответы [ 2 ]

2 голосов
/ 07 марта 2019

Нет ничего проще.

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]
  }
}),
1 голос
/ 08 марта 2019

В дополнение к этому решению вы также можете использовать API инжектора Angular.

Следуйте документации здесь

...