ApexCharts не удается прочитать свойство appendSeries из undefined

Я пытаюсь добавить новую серию к своим ApexCharts (в ngOnInit), но он продолжает говорить мне, что моя диаграмма не определена, хотя я инициализировал ее в конструкторе. Я выбрал диаграмму с несколькими рядами и группами строк, которую вы можете найти по следующей ссылке. https://apexcharts.com/angular-chart-demos/timeline-charts/multiple-series-group-rows/

@Component({
  selector: "app-gantt",
  templateUrl: "./gantt.component.html",
  styleUrls: ["./gantt.component.css"]
})
export class GanttComponent implements OnInit {
  @ViewChild("chart") chart: ChartComponent;
  public chartOptions: Partial<ChartOptions>;

  constructor() {
    this.chartOptions = {
      series: [
        {
          name: "John Adams",
          data: [
            {
              x: "President",
              y: [
                new Date(1797, 2, 4).getTime(),
                new Date(1801, 2, 4).getTime()
              ]
            },
            {
              x: "Vice President",
              y: [
                new Date(1789, 3, 21).getTime(),
                new Date(1797, 2, 4).getTime()
              ]
            }
          ]
        }    
      ],
      chart: {
        height: 350,
        type: "rangeBar"
      },
      plotOptions: {
        bar: {
          horizontal: true,
          barHeight: "50%",
          rangeBarGroupRows: true
        }
      },
      colors: [
        "#1B998B",
        "#2E294E",
        "#F46036",
        "#E2C044"
      ],
      fill: {
        type: "solid"
      },
      xaxis: {
        type: "datetime"
      },
      legend: {
        position: "right"
      },
      tooltip: {
        custom: function (opts) {
          const fromYear = new Date(opts.y1).getFullYear();
          const toYear = new Date(opts.y2).getFullYear();
          const values = opts.ctx.rangeBar.getTooltipValues(opts);

          return (
            '<div class="apexcharts-tooltip-rangebar">' +
            '<div> <span class="series-name" style="color: ' +
            values.color +
            '">' +
            (values.seriesName ? values.seriesName : "") +
            "</span></div>" +
            '<div> <span class="category">' +
            values.ylabel +
            ' </span> <span class="value start-value">' +
            fromYear +
            '</span> <span class="separator">-</span> <span class="value end-value">' +
            toYear +
            "</span></div>" +
            "</div>"
          );
        }
      }
    };
  }

  ngOnInit() {
    this.chart.appendSeries([{
      name: "George Washington",
      data: [
        {
          x: "President",
          y: [
            new Date(1789, 3, 30).getTime(),
            new Date(1797, 2, 4).getTime()
          ]
        }
      ]
    }])
  }
}

person manu.kanu    schedule 02.03.2021    source источник
comment
связанные   -  person Mike S.    schedule 02.03.2021


Ответы (1)


ngOnInit может быть слишком рано для доступа к элементам с помощью @ViewChild. Возможно, они еще не были отрисованы. У вас есть 2 варианта

  1. Установите static: true, чтобы переменная была доступна до рендеринга (только Angular v9 +). Дополнительную информацию см. здесь.
@ViewChild("chart", { static: true }) chart: ChartComponent;
  1. Или используйте AfterViewInit крючок.
export class GanttComponent implements AfterViewInit {
  @ViewChild("chart") chart: ChartComponent;
  ...

  ngAfterViewInit() {
    this.chart.appendSeries([{
      ...
    }]);
  }
}
person Michael D    schedule 02.03.2021
comment
Привет, Майкл, спасибо за ответ. К сожалению, ошибка по-прежнему появляется в обоих методах. Невозможно прочитать свойство appendSeries из undefined - person manu.kanu; 03.03.2021
comment
@ manu.kanu Я тоже столкнулся с тем же самым. Вы нашли какое-нибудь решение? - person jignesh kumar; 26.03.2021