ng2-charts 访问基础图表对象
ng2-charts access base chart object
我在 ionic 2 项目中使用 ng2-charts 绘制折线图。我需要在 (chartClick) 事件中访问图表数据点集合。为此,我需要访问图表的基础 chart.js 对象。有什么方法可以访问图表对象吗?
HTML:
<base-chart class="chart"
[data]="chartData"
[labels]="chartLabels"
[options]="lineChartOptions"
[colours]="lineChartColours"
[legend]="lineChartLegend"
[chartType]="chartType"
(chartClick)="chartClicked($event)"></base-chart>
打字稿:
chartClicked(e: any) {
var chart = //reference to base chart object.
var points = chart.getPointsAtEvent(e);
alert(chart.datasets[0].points.indexOf(points[0]));
}
最终设法解决了这个问题。使用 app.getComponent() 方法获取对 ng2-chart 对象的引用,然后对内部 chart.js 图表对象进行引用。
HTML:(添加了元素 id 'mylinechart')
<base-chart id="mylinechart" class="chart"
[data]="chartData"
[labels]="chartLabels"
[options]="lineChartOptions"
[colours]="lineChartColours"
[legend]="lineChartLegend"
[chartType]="chartType"
(chartClick)="chartClicked($event)"></base-chart>
打字稿:
constructor(private app: IonicApp) {
}
chartClicked(e: any) {
var chartComponent = this.app.getComponent('mylinechart'); //ng2-chart object
var chart = chartComponent.chart; //Internal chart.js chart object
console.log(chart.datasets[0].points.indexOf(e.activePoints[0]));
}
2017 年 2 月 14 日更新@ViewChild
如果以上方法不起作用(由于 angular 更新),请尝试此操作。我没有测试这个确切的代码,因为我没有确切的源代码了。在我当前的项目中,我使用的是 angular 2.4,所以我知道 @ViewChild 有效。
将 HTML 标记更改为:
<base-chart #mylinechart class="chart" etc..
(注意#mylinechart)
类型脚本:
顶部:import { Component, ViewChild } from '@angular/core';
然后在你的组件中 class:
@ViewChild('mylinechart')
private chartComponent: any;
constructor(private app: IonicApp) {
}
chartClicked(e: any) {
var chart = this.chartComponent.chart; //Internal chart.js chart object
console.log(chart.datasets[0].points.indexOf(e.activePoints[0]));
}
基本上,@ViewChild 会为您提供对模板中“#mylinechart”标记的组件的引用。用 @ViewChild
修饰 chartComponent
变量可以通过该变量访问图表组件。请注意,@ViewChild
返回的引用仅在 'ngAfterViewInit' 生命周期事件之后可用。由于我的用例是一个图表 'click' 事件,我可以放心地假设视图到那时已经初始化。
我在 ionic 2 项目中使用 ng2-charts 绘制折线图。我需要在 (chartClick) 事件中访问图表数据点集合。为此,我需要访问图表的基础 chart.js 对象。有什么方法可以访问图表对象吗?
HTML:
<base-chart class="chart"
[data]="chartData"
[labels]="chartLabels"
[options]="lineChartOptions"
[colours]="lineChartColours"
[legend]="lineChartLegend"
[chartType]="chartType"
(chartClick)="chartClicked($event)"></base-chart>
打字稿:
chartClicked(e: any) {
var chart = //reference to base chart object.
var points = chart.getPointsAtEvent(e);
alert(chart.datasets[0].points.indexOf(points[0]));
}
最终设法解决了这个问题。使用 app.getComponent() 方法获取对 ng2-chart 对象的引用,然后对内部 chart.js 图表对象进行引用。
HTML:(添加了元素 id 'mylinechart')
<base-chart id="mylinechart" class="chart"
[data]="chartData"
[labels]="chartLabels"
[options]="lineChartOptions"
[colours]="lineChartColours"
[legend]="lineChartLegend"
[chartType]="chartType"
(chartClick)="chartClicked($event)"></base-chart>
打字稿:
constructor(private app: IonicApp) {
}
chartClicked(e: any) {
var chartComponent = this.app.getComponent('mylinechart'); //ng2-chart object
var chart = chartComponent.chart; //Internal chart.js chart object
console.log(chart.datasets[0].points.indexOf(e.activePoints[0]));
}
2017 年 2 月 14 日更新@ViewChild
如果以上方法不起作用(由于 angular 更新),请尝试此操作。我没有测试这个确切的代码,因为我没有确切的源代码了。在我当前的项目中,我使用的是 angular 2.4,所以我知道 @ViewChild 有效。
将 HTML 标记更改为:
<base-chart #mylinechart class="chart" etc..
(注意#mylinechart)
类型脚本:
顶部:import { Component, ViewChild } from '@angular/core';
然后在你的组件中 class:
@ViewChild('mylinechart')
private chartComponent: any;
constructor(private app: IonicApp) {
}
chartClicked(e: any) {
var chart = this.chartComponent.chart; //Internal chart.js chart object
console.log(chart.datasets[0].points.indexOf(e.activePoints[0]));
}
基本上,@ViewChild 会为您提供对模板中“#mylinechart”标记的组件的引用。用 @ViewChild
修饰 chartComponent
变量可以通过该变量访问图表组件。请注意,@ViewChild
返回的引用仅在 'ngAfterViewInit' 生命周期事件之后可用。由于我的用例是一个图表 'click' 事件,我可以放心地假设视图到那时已经初始化。