ОШИБКА TypeError: невозможно прочитать свойство 'Instant' неопределенного, ngx-translate angular typescript - PullRequest
0 голосов
/ 02 августа 2020

Сегодня я пытаюсь реализовать службу перевода в ts-файле, как и везде в моем приложении, прежде всего, у этого класса:

export class GaugeChartAdapter<T = any> extends ChartAdapter<T> {

  constructor(protected translate: TranslateService) {
    super(translate);
  }

  public process() {
  ...
   options.series = options.series.map(elem => {
      if (lang === 'fr') {
        switch (elem.name) {
          case 'Institution':
            elem.name = this.translate.instant('COMPANY');
    ...

  }
}

Я должен реализовать также в классе ChartAdapter, иначе я получил эта ошибка:

    Type 'typeof GaugeChartAdapter' is not assignable to type 'new () => ChartAdapter<any>'

вот так я сделал:

export abstract class ChartAdapter<T> {
  constructor(protected translate: TranslateService) {
  }

  abstract process(...): any;
}

Моя проблема в том, что в навигаторе у меня:

core.js:4098 ERROR TypeError: Cannot read property 'instant' of undefined

Спасибо за помощь.

РЕДАКТИРОВАТЬ

Создается моя фабрика диаграмм:

export const graphsOptions: { [name: string]: any } = {
  'gauge': GAUGE_OPTIONS,//comming from a class
  //others graph..
};

export const graphsAdapters: { [name: string]: new () => ChartAdapter<any> } = {
  'gauge': GaugeChartAdapter,
  //others graph..
};

export class ChartCreator {
  public static createChart(key: string, element: HTMLElement, chartParams, callback?: any) {
    graphsOptions[key]['lang'] = chartParams.lang;
    graphsOptions[key]['title'] = chartParams.title;

    if (chartParams.colors && key === 'pie') {
      graphsOptions[key]['plotOptions']['pie']['colors'] = chartParams.colors;
    }
    const adapter = new graphsAdapters[key];
    return chart(element, adapter.process(graphsOptions[key], chartParams.data), callback);
  }

  public static createGauge(key: string, element: HTMLElement, data: any, total: number, lang: string, callback?: any) {
    const adapter = new graphsAdapters[key];
    return chart(element, adapter.process(graphsOptions[key], data, total, lang), callback);
  }

  public static createMap(key: string, data: any) {
    data[0][0] = data[0][0].toLowerCase();
    const adapter = new graphsAdapters[key];
    return new MapChart(adapter.process(graphsOptions[key], data));
  }
};

1 Ответ

1 голос
/ 03 августа 2020

Итак, я нашел ответ, благодаря @ MaieonBrix,

Мой ts файл на самом деле не был angular Поэтому я передаю параметр через создание экземпляра в моем компоненте:


//TS COMPONENT
  constructor(public translate: TranslateService) {
  }

  private renderGraph(): void {
    this.chart = ChartCreator.createGauge('gauge', this.chartTarget.nativeElement, this.chartData,
      this.total, this.lang, this.showInitValue,  this.translate);
  }
//Factory
  public static createGauge(key: string, element: HTMLElement, data: any, total: number, lang: string, callback?: any,  translateService?) {
    const adapter = new graphsAdapters[key];
    return chart(element, adapter.process(graphsOptions[key], data, total, lang, translateService), callback);
  }

et c ...

Итак, translate не был определен, потому что он не входил в область действия angular, а решение было объявлено в компоненте, вызывающем factory.

...