在 Angular 中使用Chart.js 和 ng2-charts的示例代码


Posted in Javascript onAugust 17, 2017

Chart.js是一个流行的JavaScript图表库,ng2图表是Angular 2+的包装器,可以轻松地将Chart.js集成到Angular中。 我们来看看基本用法。

安装

首先,在项目中安装 Chart.js 和 ng2-charts:

# Yarn:
$ yarn add ng2-charts chart.js

# or npm 
$ npm install ng2-charts charts.js --save

当然 ,如果你是使用Angular CLI构建的项目,你也可以很容易的添加Chart.js 添加.angular-cli.json配置文件中,以便将它与应用绑定在一直:

//: .angular-cli.json (partial)
"script": [
 "../node_modules/chart.js/dist/Chart.min.js"
]

现在,你需要在你的 app 模块或功能模块导入 ng2-charts 的ChartsModule:

//: app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { ChartsModule } from '@angular/charts';

import { AppComponent } from './app.component';

@NgModule({
 declarations: [ AppComponent ],
 imports: [
  BrowserModule,
  ChartsModule
 ],
 providers: [],
 bootstrap: [ AppComponent ]
})
export class AppModule {}

使用

ng2-charts 给我们提供了一个可以应用于HTML canvas元素的baseChart指令。 以下是一个示例,其中显示了一些用于输入的选项以及该指令输出的chartClick事件:

//: app.component.html

<div style="width: 40%;">
 <canvas
   baseChart
   [chartType]="'line'"
   [datasets]="chartData"
   [labels]="chartLabels"
   [options]="chartOptions"
   [legend]="true"
   (chartClick)="onChartClick($event)">
 </canvas>
</div>

这就是组件类现在的样子:

//: app.component.ts

import { Component } from '@angular/core';

@Component({ ... })
export class AppComponent {
 chartOptions = {
  responsive: true
 };

 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' }
 ];

 chartLabels = ['January', 'February', 'Mars', 'April'];

 onChartClick(event) {
  console.log(event);
 }
}

选项

以下就是不同的可选输入项:

chartType

设置图表的基本类型, 值可以是pipe,doughnut,bar,line,polarArea,radar或horizontalBar。

legend

一个布尔值,用于是否在图表上方显示图例。

datasets

包含数据数组和每个数据集标签的对象数组。

data

如果你的图表很简单,只有一个数据集,你可以使用data而不是datasets。

labels

x轴的标签集合

options

包含图表选项的对象。 有关可用选项的详细信息,请参阅官方Chart.js文档。

在上面的例子中,我们将图表设置为自适应模式,根据视口大小进行自动调整。

colors

在上面的例子中未显示,但你可以定义自己的颜色, 传入包含以下值的对象文字数组:

myColors = [
 {
  backgroundColor: 'rgba(103, 58, 183, .1)',
  borderColor: 'rgb(103, 58, 183)',
  pointBackgroundColor: 'rgb(103, 58, 183)',
  pointBorderColor: '#fff',
  pointHoverBackgroundColor: '#fff',
  pointHoverBorderColor: 'rgba(103, 58, 183, .8)'
 },
 // ...colors for additional data sets
];

使用自定义颜色时,必须为每个数据集提供一个颜色对象字面量。

事件

发出两个事件,chartClick和chartHover,它们允许对与图表交互的用户做出反应。 当前活动点和标签作为发射事件数据的一部分返回。

动态更新数据集

当然,Chart.js的优点在于,您的图表可以轻松地通过动态更新/响应从后端或用户输入的数据。

下面这个示例中,我们为5月份添加了一个新的数据集合:

//: app.component.ts(partial)

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];

}

它可以像这样使用:

//: app.component.html(partial)

<button (click)="newDataPoint([900, 50, 300], 'May')">
 Add data point
</button>

你可能注意到了,我们不会对图表的数据集进行改动,而是使用新数据返回包含先前数据的新对象。 Object.assign可以很容易地做到这一点。

在这个特定的例子中,如果没有提供参数时,我们为3个数据集设定了默认值为100。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript更改class和id的方法
Oct 10 Javascript
jQuery 隔行换色 支持键盘上下键,按Enter选定值
Aug 02 Javascript
jQuery 淡出一个图像到另一个图像的实现代码
Jun 12 Javascript
手机平板等移动端适配跳转URL的js代码
Jan 25 Javascript
通过JS判断联网类型和连接状态的实现代码
Apr 01 Javascript
jquery实现表单输入时提示文字滑动向上效果
Aug 10 Javascript
JS实现漂亮的时间选择框效果
Aug 20 Javascript
jquery实现图片平滑滚动详解
Mar 22 jQuery
浅入深出Vue之自动化路由
Aug 06 Javascript
Layui弹出层 加载 做编辑页面的方法
Sep 16 Javascript
微信小程序getLocation 需要在app.json中声明permission字段
Mar 03 Javascript
vue全屏事件开发详解
Jun 17 Javascript
JS 中LocalStorage和SessionStorage的使用
Aug 17 #Javascript
jQuery的时间datetime控件在AngularJs中的使用实例(分享)
Aug 17 #jQuery
详解JS中的柯里化(currying)
Aug 17 #Javascript
JavaScript实现简单评论功能
Aug 17 #Javascript
vue绑定class与行间样式style详解
Aug 16 #Javascript
Vue的MVVM实现方法
Aug 16 #Javascript
利用JS制作万年历的方法
Aug 16 #Javascript
You might like
PHP使用CURL_MULTI实现多线程采集的例子
2014/07/29 PHP
jQuery 遍历json数组的实现代码
2020/09/22 Javascript
javascript日期转换 时间戳转日期格式
2011/11/05 Javascript
jQuery实现form表单reset按钮重置清空表单功能
2012/12/18 Javascript
jquery组件使用中遇到的问题整理及解决
2014/02/21 Javascript
Javascript解析URL方法详解
2014/12/05 Javascript
浅谈js的setInterval事件
2014/12/05 Javascript
jQuery中:checked选择器用法实例
2015/01/04 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
javaScript中with函数用法实例分析
2015/06/08 Javascript
jquery中实现时间戳与日期相互转换
2016/04/12 Javascript
JS创建对象的写法示例
2016/11/04 Javascript
Vue form 表单提交+ajax异步请求+分页效果
2017/04/22 Javascript
JS按条件 serialize() 对应标签的使用方法
2017/07/24 Javascript
工作中常用到的ES6语法
2018/09/04 Javascript
vuex 解决报错this.$store.commit is not a function的方法
2018/12/17 Javascript
实例介绍JavaScript中多种组合继承
2019/01/20 Javascript
记录vue项目中遇到的一点小问题
2019/05/14 Javascript
小程序Request的另类用法详解
2019/08/09 Javascript
Python字符串格式化输出方法分析
2016/04/13 Python
Python实现压缩与解压gzip大文件的方法
2016/09/18 Python
python3.4爬虫demo
2019/01/22 Python
python爬虫 2019中国好声音评论爬取过程解析
2019/08/26 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
python函数定义和调用过程详解
2020/02/09 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
2020/03/24 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
Python连接mysql数据库及简单增删改查操作示例代码
2020/08/03 Python
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
智能钱包:Ekster
2019/11/21 全球购物
String是最基本的数据类型吗?
2013/06/13 面试题
网上卖盒饭创业计划书范文
2014/02/07 职场文书
小学亲子活动总结
2014/07/01 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript
Python3 如何开启自带http服务
2021/05/18 Python
python中if和elif的区别介绍
2021/11/07 Python