Chart.js & Angular 2 - ng2-charts 自定义点击事件
Chart.js & Angular 2 - ng2-charts Custom on Click Event
我正在尝试在我的 Angular 2 项目中实施 ng2-charts,我想知道如何创建自定义 onclick 事件。意思是,我想覆盖购物车上的当前 onclick 事件以执行一些自定义功能(重定向到页面、显示模式等)。
有没有简单的方法可以做到这一点?它是内置的吗?
任何见解将不胜感激
尝试阅读DOCS
他们对使用的解释非常好且易于理解。
内置了 2 个事件处理程序:
事件
chartClick
:点击图表时触发,returns 关于活动点和标签的信息
chartHover
:在图表上发生鼠标移动(悬停)时触发,returns 有关活动点和标签的信息
在代码中它看起来像这样:
<base-chart class="chart"
[datasets]="lineChartData"
[labels]="lineChartLabels"
[options]="lineChartOptions"
[colors]="lineChartColours"
[legend]="lineChartLegend"
[chartType]="lineChartType"
(chartHover)="chartHovered($event)"
(chartClick)="chartClicked($event)"></base-chart>
</div>
chartHovered
和 chartClicked
是您的自定义函数,它们可以有其他名称,并执行自定义操作,例如显示模态、重定向到 url 等。
public chartClicked(e: any): void {
console.log(e);
}
e.active[0]._model
和 e.active[0]._view
包含有关您单击的图表部分的信息(即 label
)。
希望我的回答是正确的。经过大量搜索后,我找到的唯一解决方案是:
public chartClicked(e:any):void {
if(e.active.length > 0){
var points = [];
var pointSelected = e.active[0]._chart.tooltip._model.caretY;
var legends = e.active[0]._chart.legend.legendItems;
for (var i = 0; i < e.active.length; ++i) {
points.push(e.active[i]._model.y);
}
let position = points.indexOf(pointSelected);
let label = legends[position].text
console.log("Point: "+label)
}}
我在 https://github.com/valor-software/ng2-charts/issues/489
找到了这个解决方案
public chartClicked(e: any): void {
if (e.active.length > 0) {
const chart = e.active[0]._chart;
const activePoints = chart.getElementAtEvent(e.event);
if ( activePoints.length > 0) {
// get the internal index of slice in pie chart
const clickedElementIndex = activePoints[0]._index;
const label = chart.data.labels[clickedElementIndex];
// get value by index
const value = chart.data.datasets[0].data[clickedElementIndex];
console.log(clickedElementIndex, label, value)
}
}
}
检查了多个地方后,点击事件是这样的。
HTML:
<div class="chart">
<canvas
baseChart
[data]="pieChartData"
[type]="pieChartType"
[options]="pieChartOptions"
[plugins]="pieChartPlugins"
(chartHover)="chartHovered($event)"
>
</canvas>
</div>
TS:
public chartHovered(e: any): void {
if (e.event.type == "click") {
const clickedIndex = e.active[0]?.index;
console.log("Clicked index=" + clickedIndex);
}
}
我正在尝试在我的 Angular 2 项目中实施 ng2-charts,我想知道如何创建自定义 onclick 事件。意思是,我想覆盖购物车上的当前 onclick 事件以执行一些自定义功能(重定向到页面、显示模式等)。
有没有简单的方法可以做到这一点?它是内置的吗?
任何见解将不胜感激
尝试阅读DOCS
他们对使用的解释非常好且易于理解。
内置了 2 个事件处理程序:
事件
chartClick
:点击图表时触发,returns 关于活动点和标签的信息
chartHover
:在图表上发生鼠标移动(悬停)时触发,returns 有关活动点和标签的信息
在代码中它看起来像这样:
<base-chart class="chart"
[datasets]="lineChartData"
[labels]="lineChartLabels"
[options]="lineChartOptions"
[colors]="lineChartColours"
[legend]="lineChartLegend"
[chartType]="lineChartType"
(chartHover)="chartHovered($event)"
(chartClick)="chartClicked($event)"></base-chart>
</div>
chartHovered
和 chartClicked
是您的自定义函数,它们可以有其他名称,并执行自定义操作,例如显示模态、重定向到 url 等。
public chartClicked(e: any): void {
console.log(e);
}
e.active[0]._model
和 e.active[0]._view
包含有关您单击的图表部分的信息(即 label
)。
希望我的回答是正确的。经过大量搜索后,我找到的唯一解决方案是:
public chartClicked(e:any):void {
if(e.active.length > 0){
var points = [];
var pointSelected = e.active[0]._chart.tooltip._model.caretY;
var legends = e.active[0]._chart.legend.legendItems;
for (var i = 0; i < e.active.length; ++i) {
points.push(e.active[i]._model.y);
}
let position = points.indexOf(pointSelected);
let label = legends[position].text
console.log("Point: "+label)
}}
我在 https://github.com/valor-software/ng2-charts/issues/489
找到了这个解决方案public chartClicked(e: any): void {
if (e.active.length > 0) {
const chart = e.active[0]._chart;
const activePoints = chart.getElementAtEvent(e.event);
if ( activePoints.length > 0) {
// get the internal index of slice in pie chart
const clickedElementIndex = activePoints[0]._index;
const label = chart.data.labels[clickedElementIndex];
// get value by index
const value = chart.data.datasets[0].data[clickedElementIndex];
console.log(clickedElementIndex, label, value)
}
}
}
检查了多个地方后,点击事件是这样的。
HTML:
<div class="chart">
<canvas
baseChart
[data]="pieChartData"
[type]="pieChartType"
[options]="pieChartOptions"
[plugins]="pieChartPlugins"
(chartHover)="chartHovered($event)"
>
</canvas>
</div>
TS:
public chartHovered(e: any): void {
if (e.event.type == "click") {
const clickedIndex = e.active[0]?.index;
console.log("Clicked index=" + clickedIndex);
}
}