管理的最終解決這個問題。使用app.getComponent()方法獲取對ng2圖表對象的引用,然後獲取對內部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]));
}
14-FEB-2017與@ViewChild更新
如果上述不起作用(由於角度更新)試試這個。我沒有測試這個確切的代碼,因爲我沒有確切的源代碼了。在我目前的項目中,我使用的是角2.4,所以我知道@ViewChild的作品。
更改HTML標記:
<base-chart #mylinechart class="chart" etc..
(通知#mylinechart)
類型的腳本:
在頂部:import { Component, ViewChild } from '@angular/core';
然後你的組件類中:
@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'生命週期事件發生後可用。由於我的用例是一個圖表'點擊'事件,我可以放心地認爲視圖已經被初始化了。
參考:Angular @ViewChild
這不適合我。 getComponent似乎不推薦使用。我嘗試過使用ViewChild,但圖表不是chartcomponent的有效屬性 – Wandang
我已發佈了使用@ViewChild更新答案。請查看新方法是否適用於您並在此處回覆。還要檢查是否需要使用「ngAfterViewInit」事件。 – ravinsp
我以前就是這樣試過的。但那不起作用。但我發現另一種方法來獲得預期的結果:http://stackoverflow.com/a/42212587/1093816(基本上查看基礎圖形BaseChartDIrectory並使用其ngOnChange方法來更新圖表。感謝您的反饋! – Wandang