vue-cli项目中使用echarts图表实例


Posted in Javascript onOctober 22, 2018

我们在项目中经常需要使用一些折线图、柱状图、饼状图等等,之前使用过heightCharts,后来觉得这货不开源,只是做展示的话又点浪费时间,于是看了下eCharts,于是在vue-cli搭建的项目中添加了eCharts,下面是具体步骤和自己的一些学习笔记,参照于Echarts3官网

现在的前端一般需要完成将大量的数据,实现可视化。现在是大数据和云计算的时代,所以数据可视化逐渐变成一种趋势。而ECharts和d3.js则是可视化的成熟框架。对于制作的图表可以说是满足你的创造力。

两者相比,D3 它被很多其他的表格插件所使用。它允许绑定任意数据到DOM,然后将数据驱动转换应用到Document中。你可以使用它用一个数组创建基本的HTML表格,或是利用它的流体过度和交互,用相似的数据创建惊人的SVG条形图。

而ECharts图表更加的适合应用,具备华丽的外衣,但很实用。

vue-cli项目中使用echarts图表实例

安装vue依赖

使用npm

npm install echarts --save

使用yarn

yarn add echarts

使用国内的淘宝镜像:

//安装淘宝镜像
npm install -g cnpm --registry=https://registry.npm.taobao.org

//从淘宝镜像下载
cnpm install echarts -S

引入ECharts

安装好的ECharts会放在node_modules目录下。

全部引入

1.直接在项目代码引入

可以直接在项目代码中 require('echarts') 得到 ECharts。声明一个echarts变量,直接使用变量即可。

Home.vue //需要使用的页面

//引入
var echarts = require('echarts');

// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));

// 绘制图表
myChart.setOption({
 title: {
 text: 'ECharts 入门示例'
 },
 tooltip: {},
 xAxis: {
 data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
 },
 yAxis: {},
 series: [{
 name: '销量',
 type: 'bar',
 data: [5, 20, 36, 10, 10, 20]
 }]
});

2.全局引入

在mian.js中全局引入,并在vue.prototype属性中添加echarts属性为$echarts,在代码中通过this.$echarts就可以使用了。

main.js

//引入
import echarts from 'echarts'

Vue.prototype.$echarts = echarts

Home.vue //需要使用的页面

//基于准备好的dom,初始化echarts实例
var myChart = this.$echarts.init(document.getElementById('main'));

// 绘制图表
myChart.setOption({
 title: {
 text: 'ECharts 入门示例'
 },
 tooltip: {},
 xAxis: {
 data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
 },
 yAxis: {},
 series: [{
 name: '销量',
 type: 'bar',
 data: [5, 20, 36, 10, 10, 20]
 }]
});

3.运行结果

vue-cli项目中使用echarts图表实例

按需引入

默认使用 require('echarts') 得到的是已经加载了所有图表和组件的 ECharts 包,因此体积会比较大,如果在项目中对体积要求比较苛刻,也可以只按需引入需要的模块。

如果只用到了柱状图,提示框和标题组件,在引入的时候也只需要引入这些模块,可以有效的将打包后的体积从 400 多 KB 减小到 170 多 KB。

引入之后使用方式和全局引入相同。

1.直接在项目代码引入

Home.vue

// 引入 ECharts 主模块
var echarts = require('echarts/lib/echarts');
// 引入柱状图
require('echarts/lib/chart/bar');
// 引入提示框和标题组件
require('echarts/lib/component/tooltip');
require('echarts/lib/component/title');

2.全局引入

main.js

import * as echarts from 'echarts/lib/echarts';
// 引入 echarts 主模块。
import 'echarts/lib/echarts'
// 引入柱形图
import 'echarts/lib/chart/bar'
// 引入柱形图
import 'echarts/lib/chart/pie'
//// 引入提示框组件、标题组件、工具箱、legend组件。
import 'echarts/lib/component/tooltip'
import 'echarts/lib/component/title'
import 'echarts/lib/component/toolbox'
import 'echarts/lib/component/legend'

Vue.prototype.$echarts =echarts;

注意

问题:

在以上例子中,我们获取dom的方式是通过document.getElementById('main'),也就是元素的id获取到dom的,这其实是会出现问题的。

代码如下

<div id="main"></div>

this.$echarts.init(document.getElementById('main'))

因为vue是单页面应用,如果将以上的组件使用两次,一个页面内id是不允许相同的,就会出现第一个组件正常显示,第二个组件无法显示。

解决办法:

在vue中,我们可以通过另一种方式获取dom,vue有一个$refs的对象,只要将组件注册ref。

代码如下

<div ref="main"></div>

this.$echarts.init(this.$refs.main)
或
this.$echarts.init(this.$refs['main'])

通过以上方法获取dom,无论组件复用多少次,都不需要担心id唯一的问题了。

Javascript 相关文章推荐
多种方法实现360浏览器下禁止自动填写用户名密码
Jun 16 Javascript
jQuery判断当前点击的是第几个li的代码
Sep 26 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
Mar 23 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
Jun 01 Javascript
jQuery 控制文本框自动缩小字体填充
Jun 16 jQuery
JavaScript实现换肤功能
Sep 15 Javascript
微信小程序 swiper组件构建轮播图的实例
Sep 20 Javascript
AngularJS中scope的绑定策略实例分析
Oct 30 Javascript
在vue项目中引入高德地图及其UI组件的方法
Sep 04 Javascript
vue中的ref和$refs的使用
Nov 22 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
Dec 19 Javascript
Vue + Scss 动态切换主题颜色实现换肤的示例代码
Apr 27 Javascript
vue使用echarts图表的详细方法
Oct 22 #Javascript
在vue中使用echarts图表实例代码详解
Oct 22 #Javascript
Koa 使用小技巧(小结)
Oct 22 #Javascript
在js代码拼接dom对象到页面上的模板总结
Oct 21 #Javascript
如何安装控制器JavaScript生成插件详解
Oct 21 #Javascript
Node.js中的不安全跳转如何防御详解
Oct 21 #Javascript
详解Axios 如何取消已发送的请求
Oct 20 #Javascript
You might like
php中判断一个字符串包含另一个字符串的方法
2007/03/19 PHP
PHP中使用addslashes函数转义的安全性原理分析
2014/11/03 PHP
php中mysql操作buffer用法详解
2015/03/19 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
纯Javascript实现Windows 8 Metro风格实现
2013/10/15 Javascript
js简单实现删除记录时的提示效果
2013/12/05 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
JavaScript模拟重力状态下抛物运动的方法
2015/03/03 Javascript
js实现touch移动触屏滑动事件
2015/04/17 Javascript
jquery 正整数数字校验正则表达式
2017/01/10 Javascript
正则验证小数点后面只能有两位数的方法
2017/02/28 Javascript
vue实现的上传图片到数据库并显示到页面功能示例
2018/03/17 Javascript
浅谈node中的cluster集群
2018/06/02 Javascript
bootstrap模态框弹出和隐藏,动态改变中间内容的实例
2018/08/10 Javascript
JS执行控制之节流模式实例分析
2018/12/21 Javascript
Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
2019/04/22 Javascript
vue项目中引入Sass实例方法
2019/08/27 Javascript
解决vue2中使用elementUi打包报错的问题
2020/09/22 Javascript
uniapp实现横向滚动选择日期
2020/10/21 Javascript
python实现360的字符显示界面
2014/02/21 Python
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
Python中Django发送带图片和附件的邮件
2017/03/31 Python
Python内建函数之raw_input()与input()代码解析
2017/10/26 Python
python使用pycharm环境调用opencv库
2018/02/11 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
2019/08/23 Python
解决django框架model中外键不落实到数据库问题
2020/05/20 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
PyCharm 2020.2 安装详细教程
2020/09/25 Python
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
什么是Rollback Segment
2013/04/22 面试题
关于.NET, HTML的五个问题
2012/08/29 面试题
关于运动会的广播稿(10篇)
2014/09/12 职场文书
2015年五一劳动节演讲稿
2015/03/18 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书
导游词之宿迁乾隆行宫
2019/10/15 职场文书