首页 > 解决方案 > 如何将服务注入另一个服务并在 Angular 中导出的常量或接口中使用它?

问题描述

我想将一个服务注入另一个服务,我想用它在导出的常量中翻译字符串。

我的代码目前看起来像这样(我在这里简化了它)

// 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”

这个问题最干净的解决方案是什么?

标签: angulartypescriptdependency-injectiontypescript-typingsangular-components

解决方案


您可以简单地在服务中创建一个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()方法。


推荐阅读