Angular 中的 ChartJs 事件

如何解决Angular 中的 ChartJs 事件

我正在制作一个图表,我需要点击每个数据标签(我在下图中指出了这一点),然后显示点击数据的特定图表。

Graph

我的问题是我无法单击并识别我按下的数据标签,我知道我使用的是 ChartJs 中的 getElementsAtEvent 方法,但是使用 Angular 中的绑定数据我无法访问此方法(我没有创建图表对象)。我在下面分享我的代码

我的模板:

UNION

我的组件:

<div style="display: block">
<canvas id ="radarChart" baseChart [datasets]="radarChartData" [labels]="radarChartLabels"
    [chartType]="radarChartType" [options]="radarChartOptions"></canvas>

解决方法

我将这个响应从我刚刚编写的模块中的一个工作解决方案中零碎地放在一起。这个特殊的产品还没有经过全面测试,但它的关键就在这里,正如它在我的代码中的工作一样。 我使用来自 stackoverflow 的一些代码将我的最终工作代码放在一起,但我发现没有任何东西看起来像这段代码(使用 ViewChild 和 Angular 点击事件连接),所以我的工作解决方案有点独特,恕我直言更简单和直接。

注意:只要 ViewChild 画布引用在运行时成为图表引用,我认为代码是合理的。我的工作解决方案在 TypeScript 代码中创建了图表对象,而您的代码是在 HTML 中创建的,因此我直接引用了图表对象,此代码尝试使用 ViewChild 引用。

如果没有,您可能需要在事件代码中添加一个 let 语句以从画布引用中提取图表对象(类似于 let myChartObj = this.myChartCanvas.(chartProperty);),然后在事件代码中引用 myChartObj 代替 this.myChart )

模板

(我添加了 #chartCanvas 和 (click) 事件)

<div style="display: block">
<canvas #chartCanvas (click)="onChartClick($event)" id="radarChart" baseChart [datasets]="radarChartData" [labels]="radarChartLabels"
    [chartType]="radarChartType" [options]="radarChartOptions"></canvas>

组件代码

添加到您的导入:

import { Chart,ChartElement } from 'chart.js';

添加到您的类变量:

@ViewChild('chartCanvas') myChart;

您的事件处理程序:

onChartClick(event) {
  let ActivePoints: ChartElement[] = this.myChart.getElementsAtEvent(event);
  // to do - check ActivePoints for undefined,return if true
  let idx = ActivePoints[0]['_index'];
  let lbl: string = this.myChart.data.labels[idx];
  let dat = this.myChart.data.datasets[0].data[idx];
  console.log(lbl,dat);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?