如何将服务注入另一个服务,并在Angular中导出的常量或接口中使用它?

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

我想将一个服务注入另一个我想用来转换导出的常量中的字符串的服务。

我的代码当前看起来像这样(我已经在这里简化了)

// Imports..

@Injectable(
  { providedIn: 'root' }
)
export class MyService {

  constructor(private httpClient: HttpClient, private injectedService: InjectedService) {
  }

  // Methods..
}

export enum Series {
  prop_1 = 'String_1',
  prop_2 = 'String_2',
  prop_3 = 'String_3',
}

export const ALL_SERIES: Series[] = [
  this.injectedService.translate(Series.prop_1),
  this.injectedService.translate(Series.prop_1),
  this.injectedService.translate(Series.prop_1),
];

但是,由于未在组件外部检测到注入的服务,所以出现此错误:

错误错误:未捕获(承诺):TypeError:无法读取未定义的属性'injectedService'

什么是解决此问题的最佳方法?

angular typescript dependency-injection typescript-typings angular-components
1个回答
2
投票

您可以简单地在服务中创建getSeries方法,该方法将返回常量的值。 This将在MyService类中定义,因此没有错误。

@Injectable({
  providedIn: 'root'
})
export class MyService {

  constructor(private httpClient: HttpClient, private injectedService: InjectedService) {}

  // Methods..

  getSeries(): Series[] {
    return [
      this.injectedService.translate(Series.prop_1),
      this.injectedService.translate(Series.prop_1),
      this.injectedService.translate(Series.prop_1),
    ];
  }
}

export enum Series {
  prop_1 = 'String_1',
    prop_2 = 'String_2',
    prop_3 = 'String_3',
}

虽然不是ALL_SERIES,但您必须调用getSeries()方法。

© www.soinside.com 2019 - 2024. All rights reserved.