ng2-диаграмма: добавление меток в цикле предотвращает загрузку графика

#angular #chart.js2 #ng2-charts

#angular #диаграмма.js2 #ng2-диаграммы

Вопрос:

Я пытаюсь получить график для отображения моих данных с помощью ng2-charts. С использованием макетных данных все работает нормально, однако, когда я пытаюсь выполнить итерацию по массиву, переданному моим родительским компонентом, сам график не отображается, только ортогональная метка, и в консоли ничего не отображается. Я сузил проблему до массива меток: если вы удалите прокомментированную строку в LineChartComponent, это сработает.

Вот мой код :

 import { Component, Input } from '@angular/core';
import { CHART_DIRECTIVES } from 'ng2-charts/ng2-charts';
import { Traffic } from './traffic';

@Component({
  selector: 'line-chart-component',
  directives: [CHART_DIRECTIVES],
  styles: [`
    .chart {
      display: block;
    }
  `],
  template: `
  <div style="display: block">
        <canvas baseChart
              [datasets]="datasets"
              [labels]="labels"
              [chartType]="'line'"
              (chartHover)="chartHovered($event)"
              (chartClick)="chartClicked($event)"></canvas>
        </div>
  `
})

export class LineChartComponent {
  _dataArray: Traffic[] = [];    
  private datasets = [
      {
        label: "Desktop",
        data: []
      }
    ];    
  private labels: string [] = [];

  @Input()
  set dataArray(dataArray: Traffic[]) {
    dataArray.forEach((data: any,index: number) => {
      this.datasets[0].data.push(Math.round(data.Value));
      this.labels.push(data.Date));
    });
    // this.labels = ['0','1','2','3','4','5','6','7','8','9','10','11'];
  }

  get dataArray() { return this._dataArray; }

  private options = {
    scales: {
      yAxes: [{
        ticks: {
          beginAtZero: true
        }
      }]
    }
  };
}
  

Примечание: Ни один из массивов не определен. И оба имеют хорошую структуру, содержат все мои данные и имеют соответствующую типизацию. Кроме того, Data.date возвращает строку.

Что может привести к такому поведению?

Спасибо!

Ответ №1:

Итак, вот ответ: похоже, что между двумя массивами существует какое-то условие гонки. Я предполагаю, что ввод меток занимает больше времени, чем ввод чисел, и поэтому график не загружается должным образом. Вызов this.datasets = this.datasets.slice(); в конце моего установщика для обновления графика сделал свое дело.