图表无法从后端读取多个数据集(单个数据可以)
chart cannot read multiple datasets from the back-end (single data is fine)
我正在使用 Angular 4、Chart.js 2.8.0 和 ng2-charts 1.6.0 在我的网页中创建图表。我已经在 angular-cli 文件中插入了 chart.min.js(脚本部分)的路径,并且还在 app.module.ts 文件中导入了 ChartsModule。
我首先使用如下静态数据创建图表,效果很好(在构造函数之后和 ngOnInit 之前):
ts 文件
....
public barChartData: ChartDataSets[] = [
{data: [1,2,3,4,5],
label: 'Data 1'},
{data: [5,6,7,8,9], label: 'Data 2'}
];
....
html 文件
<div class="container">
<div style="display: block">
<canvas baseChart
[datasets]="barChartData"
[labels]="barChartLabels"
[options]="barChartOptions"
[legend]="barChartLegend"
[chartType]="barChartType">
</canvas>
</div>
</div>
然后,我尝试给它后端数据集(数字数组:例如:[11,12,13,14,15])。我有一个调用是在 ngOnInit 之后读取的:
this.test2 = this.tests.testResults;
我使用了如下所示的单一数据输入,它工作正常:
<div class="container">
<div style="display: block" *ngIf="test2.length">
<canvas baseChart
[data]="test2"
[labels]="barChartLabels"
[options]="barChartOptions"
[legend]="barChartLegend"
[chartType]="barChartType">
</canvas>
</div>
</div>
但是一旦我想像下面这样在ts文件中制作两个数据集,它就会给出"data not defined"的错误。
ts文件(注意测试2是[11,12,13,14,15])
....
public barChartData: ChartDataSets[] = [
{data: this.test2,
label: 'Data 1'},
{data: [5,6,7,8,9], label: 'Data 2'}
];
....
html 文件
<div class="container">
<div style="display: block" *ngIf="barChartData.length">
<canvas baseChart
[datasets]="barChartData"
[labels]="barChartLabels"
[options]="barChartOptions"
[legend]="barChartLegend"
[chartType]="barChartType">
</canvas>
</div>
</div>
我在这里做错了什么?
您正在动态插入数据,因此您需要对更改进行更新。为此,您将需要 ChangeDetectorRef
。执行以下步骤:
1) 在您的导入中添加:
import { ChangeDetectorRef } from '@angular/core';
2) 在构造函数中添加:
private cdRef: ChangeDetectorRef
3) 更改数据后执行此操作:
this.cdRef.detectChanges();
我可以找到解决方案。看看这个 link。我如下定义我的变量(这解决了我上面提到的所有错误):
private test2: any[] = [{ data: [] }];
此外,我更改了调用 barChartData
的位置。
首先,在出口class:
public barChartData;
然后,在我调用后端数据的函数中:
this.barChartData = [
{data: this.test2, label: 'Data 1'},
{data: this.test3, label: 'Data 2'}
];
这对我有用。
我正在使用 Angular 4、Chart.js 2.8.0 和 ng2-charts 1.6.0 在我的网页中创建图表。我已经在 angular-cli 文件中插入了 chart.min.js(脚本部分)的路径,并且还在 app.module.ts 文件中导入了 ChartsModule。
我首先使用如下静态数据创建图表,效果很好(在构造函数之后和 ngOnInit 之前):
ts 文件
....
public barChartData: ChartDataSets[] = [
{data: [1,2,3,4,5],
label: 'Data 1'},
{data: [5,6,7,8,9], label: 'Data 2'}
];
....
html 文件
<div class="container">
<div style="display: block">
<canvas baseChart
[datasets]="barChartData"
[labels]="barChartLabels"
[options]="barChartOptions"
[legend]="barChartLegend"
[chartType]="barChartType">
</canvas>
</div>
</div>
然后,我尝试给它后端数据集(数字数组:例如:[11,12,13,14,15])。我有一个调用是在 ngOnInit 之后读取的:
this.test2 = this.tests.testResults;
我使用了如下所示的单一数据输入,它工作正常:
<div class="container">
<div style="display: block" *ngIf="test2.length">
<canvas baseChart
[data]="test2"
[labels]="barChartLabels"
[options]="barChartOptions"
[legend]="barChartLegend"
[chartType]="barChartType">
</canvas>
</div>
</div>
但是一旦我想像下面这样在ts文件中制作两个数据集,它就会给出"data not defined"的错误。
ts文件(注意测试2是[11,12,13,14,15])
....
public barChartData: ChartDataSets[] = [
{data: this.test2,
label: 'Data 1'},
{data: [5,6,7,8,9], label: 'Data 2'}
];
....
html 文件
<div class="container">
<div style="display: block" *ngIf="barChartData.length">
<canvas baseChart
[datasets]="barChartData"
[labels]="barChartLabels"
[options]="barChartOptions"
[legend]="barChartLegend"
[chartType]="barChartType">
</canvas>
</div>
</div>
我在这里做错了什么?
您正在动态插入数据,因此您需要对更改进行更新。为此,您将需要 ChangeDetectorRef
。执行以下步骤:
1) 在您的导入中添加:
import { ChangeDetectorRef } from '@angular/core';
2) 在构造函数中添加:
private cdRef: ChangeDetectorRef
3) 更改数据后执行此操作:
this.cdRef.detectChanges();
我可以找到解决方案。看看这个 link。我如下定义我的变量(这解决了我上面提到的所有错误):
private test2: any[] = [{ data: [] }];
此外,我更改了调用 barChartData
的位置。
首先,在出口class:
public barChartData;
然后,在我调用后端数据的函数中:
this.barChartData = [
{data: this.test2, label: 'Data 1'},
{data: this.test3, label: 'Data 2'}
];
这对我有用。