在 angular 2 中更新 ng-charts 条形图数据集
Updating ng-charts barchart datasets in angular 2
如何从angular2更新条形图?我正在尝试在点击时添加新条目 [datasets]="barChartData"
在模板中,图形如下所示:
<canvas baseChart #myChart
[datasets]="barChartData"
[labels]="barChartLabels"
[options]="barChartOptions"
[legend]="barChartLegend"
[chartType]="barChartType"
(chartHover)="chartHovered($event)"
(chartClick)="chartClicked($event)"></canvas>
我尝试了以下推荐的方法:
1)直接更改数据集变量 - 克隆数据,更改它然后分配它。这样我可以 change/update 现有数据,但我不能向数据集添加新条目。
2) ChangeDetectorRef,我将 private ref: ChangeDetectorRef 添加到构造函数并在更新时调用 ref.detectChanges()
。但没有运气。我也尝试使用 ApplicationRef.
在这两种情况下,在调试 window 中,我可以看到 barChartData 已使用 ts 文件中的新值更新,但模板(html)不是 updated/refreshed。
经过一天的痛苦我找到了一个有效的解决方案:
首先你必须导入指令:
import {BaseChartDirective} from 'ng2-charts/ng2-charts'
然后参考class中的图表:
@ViewChild(BaseChartDirective)
public chart: BaseChartDirective;
现在您可以使用图表对象访问模板中的图表。然后在您要刷新图表时放置此代码:
this.chart.ngOnChanges({} as SimpleChanges);
确保将空对象作为 SimpleChanges 类型传递。仅当参数为空对象时,ngOnChanges 才会重新绘制图表。
请注意,在调用 ngOnChanges 之前,您必须克隆并更改对数据集的引用。
在我的例子中,我这样做是为了刷新图形:`
this.barChartData = clone;
this.chart.datasets = this.barChartData;
this.chart.ngOnChanges({} as SimpleChanges);`
如何从angular2更新条形图?我正在尝试在点击时添加新条目 [datasets]="barChartData"
在模板中,图形如下所示:
<canvas baseChart #myChart
[datasets]="barChartData"
[labels]="barChartLabels"
[options]="barChartOptions"
[legend]="barChartLegend"
[chartType]="barChartType"
(chartHover)="chartHovered($event)"
(chartClick)="chartClicked($event)"></canvas>
我尝试了以下推荐的方法: 1)直接更改数据集变量 - 克隆数据,更改它然后分配它。这样我可以 change/update 现有数据,但我不能向数据集添加新条目。
2) ChangeDetectorRef,我将 private ref: ChangeDetectorRef 添加到构造函数并在更新时调用 ref.detectChanges()
。但没有运气。我也尝试使用 ApplicationRef.
在这两种情况下,在调试 window 中,我可以看到 barChartData 已使用 ts 文件中的新值更新,但模板(html)不是 updated/refreshed。
经过一天的痛苦我找到了一个有效的解决方案: 首先你必须导入指令:
import {BaseChartDirective} from 'ng2-charts/ng2-charts'
然后参考class中的图表:
@ViewChild(BaseChartDirective)
public chart: BaseChartDirective;
现在您可以使用图表对象访问模板中的图表。然后在您要刷新图表时放置此代码:
this.chart.ngOnChanges({} as SimpleChanges);
确保将空对象作为 SimpleChanges 类型传递。仅当参数为空对象时,ngOnChanges 才会重新绘制图表。
请注意,在调用 ngOnChanges 之前,您必须克隆并更改对数据集的引用。 在我的例子中,我这样做是为了刷新图形:`
this.barChartData = clone;
this.chart.datasets = this.barChartData;
this.chart.ngOnChanges({} as SimpleChanges);`