Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 将角度服务注入导出的函数?_Angular_Typescript_Function_Dependency Injection_Angular Services - Fatal编程技术网

Angular 将角度服务注入导出的函数?

Angular 将角度服务注入导出的函数?,angular,typescript,function,dependency-injection,angular-services,Angular,Typescript,Function,Dependency Injection,Angular Services,我在AppComponent中定义了以下导出函数(类外): export function multiTranslateHttpLoaderFactory(http: HttpClient) { return new MultiTranslateHttpLoader(http, [ {prefix: './assets/i18n/default/', suffix: '.json'}, {prefix: './assets/i18n/bc/', suffix: '.json'

我在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]
  }
}),
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'}
    ]);
  }
}
我需要一种在导出函数中使用AuthService的方法,因为我需要某些属性来实现逻辑

有可能吗

例如,我希望以以下方式使用我的authService:

TranslateModule.forRoot ({
  loader: {
    provide: TranslateLoader,
    useFactory: multiTranslateHttpLoaderFactory,
    deps: [HttpClient]
  }
}),
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


为什么不将它添加到
deps
列表和工厂参数列表中呢?嗯,我不明白。好吧,你看到你是如何将HttpClient注入其中的了吗?只要在服务中再做一次就行了。看起来很有效。但是我不需要把我的函数写回到AppModule里面,对吗?因为我想把它保存在AppComponent中,所以我的AppModule是clean.ehm。功能位置完全由您决定。没有人在这方面限制你