如何在 Angular 中使用 ng2-charts 来使用 Chart.js

2024-02-16 09:44

本文主要是介绍如何在 Angular 中使用 ng2-charts 来使用 Chart.js,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍

Chart.js 是一个流行的 JavaScript 图表库,ng2-charts 是 Angular 2+ 的一个包装器,用于在 Angular 中集成 Chart.js。

在本教程中,您将使用 Chart.js 和 ng2-charts 在 Angular 应用程序中创建示例图表。

先决条件

要完成本教程,您需要:

  • 本地安装了 Node.js,您可以按照《如何安装 Node.js 并创建本地开发环境》中的步骤进行安装。
  • 对设置 Angular 项目和使用 Angular 组件有一定的了解可能会有所帮助。

本教程已使用 Node v14.13.1、npm v6.14.8、angular v10.1.6、chart.js v2.9.4 和 ng2-charts v2.4.2 进行验证。

步骤 1 —— 设置项目

您可以使用 @angular/cli 创建一个新的 Angular 项目。

在您的终端窗口中,使用以下命令:

npx @angular/cli new angular-chartjs-example --style=css --routing=false --skip-tests

这将配置一个新的 Angular 项目,样式设置为 “CSS”(而不是 “Sass”、“Less” 或 “Stylus”),没有路由,并跳过测试。

转到新创建的项目目录:

cd angular-chartjs-example

从项目文件夹中运行以下命令以安装 chart.js

npm install chart.js@2.9.4 ng2-charts@2.4.2

接下来,通过打开您的代码编辑器并修改 angular.json 来将 chart.js 添加到您的 Angular 应用程序中,以包括 Chart.min.js


{// ..."projects": {"angular-chartjs-example": {// ..."architect": {"build": {// ..."options": {// ..."scripts": ["node_modules/chart.js/dist/Chart.min.js"],"allowedCommonJsDependencies": ["chart.js"]},// ...},}}},// ...
}

然后,打开 app.module.ts 并修改它以导入 ChartsModule


import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { ChartsModule } from 'ng2-charts';import { AppComponent } from './app.component';@NgModule({declarations: [AppComponent],imports: [BrowserModule,ChartsModule],providers: [],bootstrap: [AppComponent]
})
export class AppModule { }

有了这个基本结构,您可以开始创建图表组件。

步骤 2 —— 创建图表组件

让我们从一个示例开始,该示例使用一些选项作为输入来绘制与四个月内三个不同账户相关联的值。

ng2-charts 为您提供了一个 baseChart 指令,可以应用于 HTML canvas 元素。

在代码编辑器中打开 app.component.html 并用以下代码替换内容:


<div style="width: 40%;"><canvasbaseChart></canvas>
</div>

然后,修改 canvas 以传入 chartTypelegend


<div style="width: 40%;"><canvas...[chartType]="'line'"[legend]="true"></canvas>
</div>
  • chartType:这设置了图表的基本类型。值可以是 piedoughnutbarlinepolarArearadarhorizontalBar
  • legend:一个布尔值,用于指定是否应在图表上方显示图例。

然后,修改 canvas 以传入 datasets


<div style="width: 40%;"><canvas...[datasets]="chartData"></canvas>
</div>

接下来,在代码编辑器中打开 app.component.ts 来定义模板中引用的数组:


// ...
export class AppComponent {// ...chartData = [{data: [330, 600, 260, 700],label: 'Account A'},{data: [120, 455, 100, 340],label: 'Account B'},{data: [45, 67, 800, 500],label: 'Account C'}];
}
  • datasets:这应该是一个包含数据数组和每个数据集的标签的对象数组。
  • data:或者,如果您的图表很简单,只有一个数据集,您可以使用 data 而不是 datasets,并传入一个数据点数组。

现在,重新打开 app.component.html 并修改 canvas 以传入 labels


<div style="width: 40%;"><canvas...="chartLabels"></canvas>
</div>

接下来,再次在代码编辑器中打开 app.component.ts 来定义模板中引用的数组:


// ...
export class AppComponent {// ...chartLabels = ['January','February','March','April'];
}
  • labels:X 轴的标签数组。

现在,重新打开 app.component.html 并修改 canvas 以传入 options


<div style="width: 40%;"><canvas...[options]="chartOptions"></canvas>
</div>

接下来,再次在代码编辑器中打开 app.component.ts 来定义模板中引用的对象:


// ...
export class AppComponent {// ...chartOptions = {responsive: true};
}
  • options:一个包含图表选项的对象。您可以参考官方 Chart.js 文档了解可用选项的详细信息。

重新编译您的应用程序:

npm start

当在 Web 浏览器中访问您的应用程序(通常是 localhost:4200)时,您将看到一个图表,其中绘制了 Account AAccount BAccount CAprilFebruaryMarchApril 月份的数据:

!示例图表与 ng2-chart

Chart.js 还提供了官方文档中介绍的其他属性和选项。

第三步 — 处理 chartClickchartHover 事件

两个事件被触发,分别是 chartClickchartHover,它们提供了一种方式来响应用户与图表的交互。当前活动的点和标签将作为事件数据的一部分返回。

让我们创建一个示例,将它们添加到画布中。

打开 app.component.html 并添加 chartHoverchartClick

<div style="width: 40%;"><canvas...(chartHover)="onChartHover(($event)"(chartClick)="onChartClick(($event)"></canvas>
</div>

打开 app.component.ts 并添加你在模板中引用的自定义函数:

// ...
export class AppComponent {// ...onChartHover = ($event: any) => {window.console.log('onChartHover', $event);};onChartClick = ($event: any) => {window.console.log('onChartClick', $event);};
}

重新编译你的应用程序后,你将在开发者工具中观察到 onChartHoveronChartClick 被记录。

第四步 — 动态更新数据集

使用 Chart.js 的一个亮点是能够动态更新或响应从后端或用户输入接收到的数据。

让我们继续基于前面的示例,在 4 个月内绘制 3 个账户值,并为五月份添加新的数据点。

打开 app.component.ts 并定义自定义函数:

// ...
export class AppComponent {// ...newDataPoint(dataArr = [100, 100, 100], label) {this.chartData.forEach((dataset, index) => {this.chartData[index] = Object.assign({}, this.chartData[index], {data: [...this.chartData[index].data, dataArr[index]]});});this.chartLabels = [...this.chartLabels, label];}
}

如果没有传递数组给 newDataPoint(),则默认值为 [100, 100, 100]

在数据集数组上也没有进行 mutation。使用 Object.assign 返回包含先前数据和新数据的新对象。

然后,在 app.component.html 中,在 canvas 后使用自定义函数在一个 button 中:

<div style="width: 40%;">...<button (click)="newDataPoint([900, 50, 300], 'May')">添加数据点</button>
</div>

重新编译你的应用程序后,当你与 添加数据点 按钮交互时,你将观察到图表将为 五月 月份绘制 A 账户B 账户C 账户 的值。

结论

在本教程中,你使用了 Chart.js 和 ng2-charts 在 Angular 应用程序中创建了一个示例图表。

这些库共同为你提供了以现代和动态的方式呈现数据的能力。

这篇关于如何在 Angular 中使用 ng2-charts 来使用 Chart.js的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/714178

相关文章

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

MySQL 强制使用特定索引的操作

《MySQL强制使用特定索引的操作》MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异... 目录1. 使用FORCE INDEX语法2. 使用USE INDEX语法3. 使用IGNORE IND

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

flask库中sessions.py的使用小结

《flask库中sessions.py的使用小结》在Flask中Session是一种用于在不同请求之间存储用户数据的机制,Session默认是基于客户端Cookie的,但数据会经过加密签名,防止篡改,... 目录1. Flask Session 的基本使用(1) 启用 Session(2) 存储和读取 Se