ng2-chart:在循环中添加标签会阻止图表加载
ng2-chart : Adding labels in a loop prevents graph from loading
我正在尝试使用 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
}
}]
}
};
}
N.B : None 个数组未定义。两者都具有良好的结构,包含我的所有数据并具有适当的类型。另外,Data.date
returns 一个字符串。
什么会导致这种行为?
谢谢!
答案是:两个数组之间似乎存在某种竞争条件。我的猜测是标签的推送比数字的推送花费的时间更长,因此图表无法正确加载。
在我的 setter 结束时调用 this.datasets = this.datasets.slice();
来更新图表就成功了。
我正在尝试使用 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
}
}]
}
};
}
N.B : None 个数组未定义。两者都具有良好的结构,包含我的所有数据并具有适当的类型。另外,Data.date
returns 一个字符串。
什么会导致这种行为?
谢谢!
答案是:两个数组之间似乎存在某种竞争条件。我的猜测是标签的推送比数字的推送花费的时间更长,因此图表无法正确加载。
在我的 setter 结束时调用 this.datasets = this.datasets.slice();
来更新图表就成功了。