EChart是目前一个应用较为广泛的图表工具,可高度个性化定制的数据可视化图表。
由于项目中需要用到的图表比较多,这里简单的总结一下,使用面向对象的方法,定义chart类,来初始化&更新图表,不喜欢面向对象封装的,可以直接看最下面。
安装
1 | npm install echarts --save |
定义chart类
创建chart.js,这里要注意的是,必须引入所有需要用到的echart模块,可以按需引入的模块列表见‘EChart’1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25import echarts from 'echarts/lib/echarts';
import 'echarts/lib/chart/bar';
……
export default class Chart{
constructor(el){
this.chart = echarts.init(el); //初始化,传入dom对象
this.options = {}; //配置项
}
show(op){
this.options = _.assignIn(this.defaults, op);
this.chart.clear();
this.chart.setOption(this.options);
return this;
}
resize(){
let chart = this.chart;
window.onresize = function(){
chart.resize();
}
return this;
}
}
调用resize方法可以实现,随窗口改变刷新图表大小,在使用时需要保证图表自身是适应大小的,而不是固定的
应用chart创建图表类
1 | import Chart from './Chart'; |
关于配置项options,不过多介绍,详见‘EChart配置项手册’
实例图表对象
1 | <div ref="chartInstance" class="w-100 h-100"></div> |
这样一来一个实例化的chart就可以成功显示了,当我们需要更多chart时,只需要继续创建图标类,更改配置项就可以方便的添加更多种类的chart了。
简单粗暴的解决方法
什么?面向对象?EXM?好吧,我也发现了,这么写虽然封装的比较完善,但是对于需求较少的项目,显得太过复杂,接下来说一下直接用的方式吧。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20import * as echarts from 'echarts/lib/echarts';
import 'echarts/lib/chart/line'
// 引入各种需要的模块
export function initChart (el, data) {
let myChart = echarts.init(el);
setOption(myChart, data);
return myChart;
}
export function setOption (chart, data) {
let options = getOptions(data);
chart.setOption(options)
}
function getOptions (data) {
return {
// options
}
}
这里将init
方法跟setOption
分开写,是为了在数据变化时重新设置options
,当然,直接再次初始化chart也可以。getOptions
方法用来整理数据,由于项目只用到了一个chart,所以我直接写了一起,需要使用较多次的话,传参或者从其他文件引入吧。
应用chart:1
2
3
4
5
6
7
8
9<div ref="chartContent"></div>
import { initChart, setOption } from '../../assets/js/chart';
if (!this.chart) {
this.chart = initChart(this.$refs.chartContent, this.report);
} else {
setOption(this.chart, this.report)
}