echart vue 图表大小_vue之将echart封装为组件

最近的新项目里,有大量数据图表类的需求,为了增强代码的复用性,减少冗余,我开始思考如何将echart封装为组件调用。本文将会以雷达图为案例,一步步讲解在vue项目中如何使用echart,如何将其封装为能重复调用的组件。

转载链接:https://www.jianshu.com/p/ec39019e2141

阅读之前,可以先看看我之前的一些文章,这样能更好的理解这次的内容:

《使用vue-cli(vue脚手架)快速搭建项目》

《手把手教你Vue之父子组件间通信实践讲解【props、$ref 、$emit】》

ff5409b1759f0140193f0b5e270475d9.png

1. 安装Echarts

首先第一步,肯定是安装Echarts了。通过cd命令进入项目根目录,然后敲以下命令行:

cnpm install echarts -S

安装成功会如下显示,package.json里的dependencies属性也会自动加上Echarts依赖:

51c07e01613956ee5c626e1aad27e5d7.png

安装Echarts

a6e45e140e7721d27f455dd197f29fb5.png

package.json

2.在vue项目中使用Echarts

安装成功以后,我们先要考虑的是如何在vue项目中导入Echarts,并成功初始化一个图表。

下面我会先建两个.vue文件 chart.vue 和 radar-chart.vue 作为这次示例的基础。 chart.vue的角色是调用雷达图,radar-chart.vue的角色是提供雷达图:

//chart.vue 
//radar-chart.vue

好,正式创建一个Echarts图表了

(1)在radar-chart.vue导入echart :

  // 引入基本模板  import echarts from 'echarts/lib/echarts'  // 引入雷达图组件  import 'echarts/lib/chart/radar'  // 引入提示框和图例组件  import 'echarts/lib/component/tooltip'  import 'echarts/lib/component/legend'

(2)创建图表配置数据,数据格式参考 Echarts官网:

      const option = {        tooltip: {},        radar: {          indicator: [{name: '体育', max: '100'}, {name: '数学', max: '100'}, {name: '化学', max: '100'}, {name: '劳动',  max: '100'}, {name: '物理',  max: '100'}],          center: ['50%', '51%']        },        series: [{          type: 'radar',          itemStyle: {normal: {areaStyle: {type: 'default'}}},          data: [            {              value: [58,56,78,64,98],              name: '各项得分',              itemStyle: {normal: {color: '#f0ad4e'}}            }          ]        }]      }

(3)初始化图表:

   const chartObj = echarts.init(document.getElementById('radar'))   chartObj.setOption(option)

上面几步汇总为以下代码,另外补充一点就是,创建配置数据option和初始化的时候,都要放在mounted钩子函数里执行,这样才能保证获取dom的是时候,dom已完成渲染:

//chart.vue 
//radar-chart.vue

出来的效果是这样的:

0f1af967c0eec30753e3ad9871d73fa8.png

效果一

3.将Echarts封装为组件

上面我们已经成功创建一个雷达图了,但是很明显的是,radar-chart.vue里的数据写死的,无法重复调用。接下来着手封装的事情了。

封装的思路是这样的: (1)chart.vue向radar-chart.vue传递一组个性化数据 (2)radar-chart.vue通过props选项接收数据 (3)提炼接收到的数据,覆盖配置数据option (4)初始化图表 (如果对如何传递数据不理解,可以先看看我在开始的时候提到的,我的另一篇文章 —— “ vue之父子组件间通信实例讲解(props、$ref 、 $emit )”)

具体代码如下:

//chart.vue (父组件) //传递在子组件prop选项里约定好的数据
//radar-chart.vue (子组件)

封装以后,就能传递自定义的数据,反复调用了。上面代码最后的效果是这样的:

447f92b7b22ef562963fd62163febbe4.png

效果二

4.细节优化

基本的功能已经实现了,下面我们来优化下一些细节。

不知道大家有没发现radar-chart.vue里的-id是写死的,这会出现什么问题?当一个页面调用两次这个雷达图组件,id就会重复了,从而报错。

为了解决这个问题,我引入了uuid(vue-cli项目自带,不需另外安装),意在为每个生成的雷达图配一个不重复的随机id。还需要注意的是,我们要在created()方法里去做这个生成id的事情,如果写在mounted了就会出现无法初始化的情况,因为来不及渲染新的ID,就执行document.getElementById()了,具体代码如下:

成功解决重复id的问题:

460c7bbae92f762e5ba769d03a032645.png

效果三

整个封装echart的思路就是上面那样了,其实这个demo还不完美,像雷达图的宽高也是写死的,还没来得及做更多的优化,后面有空慢慢再完善它~


转载链接:https://www.jianshu.com/p/ec39019e2141

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssh(Spring+Spring mvc+hibernate)——Dept.hbm.xml

<?xml version"1.0" encoding"utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file au…

个性化配置你的SQL Server on Linux

问题引入 这天老鸟满面春风找到菜鸟&#xff1a;“鸟儿啊&#xff0c;看你最近研究SQL Server On Linux如鱼得水&#xff0c;干得不错啊。不过呢&#xff0c;这是一个张扬个性的年代&#xff0c;要创新&#xff0c;要与众不同&#xff0c;那你怎么在Linux平台对SQL Server做个性…

idea查看读取的那个nacos配置和yaml配置 naocos 日志

logging.level.com.alibaba.cloud.nacos.client.NacosPropertySourceBuilderdebug

二叉树的前中后序查找+思路分析

思路分析 代码实现 package com.atguigu.tree;/*** 创建人 wdl* 创建时间 2021/3/24* 描述*/ public class BinaryTreeDemo {public static void main(String[] args) {//先需要创建一颗二叉树BinaryTree binaryTree new BinaryTree();//创建需要的节点HeroNode root new He…

JavaScript Function.arguments 属性详解

转载自 JavaScript Function.arguments 属性详解 arguments属性是正在执行的函数的内置属性&#xff0c;返回该函数的arguments对象。arguments对象包含了调用该函数时所传入的实际参数信息(参数个数、参数值等)。 该属性属于Function对象&#xff0c;所有主流浏览器均支持…

sh(Spring+Spring mvc+hibernate)——BaseDao.java

/** * Title: BaseDao.java * Package org.dao * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-11-17 上午8:17:28 * version V1.0 */ package org.dao;import java.io.Serializable;/*** * * 项目名称&#xff…

spark sql uv_使用Spark Streaming SQL进行PV/UV统计

作者&#xff1a;关文选&#xff0c;花名云魄&#xff0c;阿里云E-MapReduce 高级开发工程师&#xff0c;专注于流式计算&#xff0c;Spark Contributor1.背景介绍PV/UV统计是流式分析一个常见的场景。通过PV可以对访问的网站做流量或热点分析&#xff0c;例如广告主可以通过PV…

asp.net core mvc实现伪静态功能

在大型网站系统中&#xff0c;为了提高系统访问性能&#xff0c;往往会把一些不经常变得内容发布成静态页&#xff0c;比如商城的产品详情页&#xff0c;新闻详情页&#xff0c;这些信息一旦发布后&#xff0c;变化的频率不会很高&#xff0c;如果还采用动态输出的方式进行处理…

二叉树删除节点+思路分析

思路分析 代码实现 ![在这里插入代码片](https://img-blog.csdnimg.cn/20210325193201194.png?x-oss-processimage/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzgzNjYw,size_16,color_FFFFFF,t_70)

sql mysql 命令计算年龄 格式化日期

命令计算年龄 <if test"query.startAge ! null" >and <![CDATA[ timestampdiff(year, substring(u.idno, 7, 8), now()) > startAge ]]></if>select timestampdiff(year, substring(110101199309228395, 7, 8), now());SELECT DATE_FORMAT(N…

比较正宗的验证邮箱的正则表达式js代码详解

转载自 比较正宗的验证邮箱的正则表达式js代码详解 邮箱正则最正宗的一条正则语句是^[a-z0-9]([._\\-]*[a-z0-9])*([a-z0-9][-a-z0-9]*[a-z0-9].){1,63}[a-z0-9]$ 下面我们来讲解一下 fuchangxi的正则&#xff1a; /^([a-zA-Z0-9_-])([a-zA-Z0-9_-])(.[a-zA-Z0-9_-])/ 开…

ddm模型公式_简单判断目前行情——从股利贴现模型切入

本文目录&#xff1a;1.介绍股利贴现模型&#xff1b;2.以贵州茅台为例根据现有情况估计模型内部各参数&#xff1b;3.得出结论&#xff1b;一、股利贴现模型&#xff08;DDM&#xff09;我们知道给一项资产定价最朴素的想法是将它未来产生的所有现金流以一定的贴现率贴现至当前…

sh(Spring+Spring mvc+hibernate)——IDeptDao.java

/** * Title: IDeptDao.java * Package org.dao * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-11-21 上午9:42:32 * version V1.0 */ package org.dao;import java.util.List;import org.entity.Dept;/** * * …

解决Html5用canvas绘制不出来图片的问题

转载自 解决Html5用canvas绘制不出来图片的问题 如果使用html5的ctx.drawImage(img,0,0);绘制不出来&#xff0c; 就改为&#xff1a;img.onload function(){ctx.drawImage(img,0,0);} 只有img 加载完了&#xff0c;你画它才有意义。

Hutool 日期时间工具-DateUtil使用

java中获取当月1号零时零分的时间 /*** 获得当月1号零时零分零秒* return*/ public Date initDateByMonth(){Calendar calendar Calendar.getInstance();calendar.setTime(new Date());calendar.set(Calendar.DAY_OF_MONTH, 1);calendar.set(Calendar.HOUR_OF_DAY, 0);calenda…

顺序存储二叉树

package com.atguigu.tree;/*** 创建人 wdl* 创建时间 2021/3/25* 描述*/ public class ArrBinaryTreeDemo {public static void main(String[] args) {int[] arr{1,2,3,4,5,6,7};//创建一个ArrBinaryTreeArrBinaryTree arrBinaryTree new ArrBinaryTree(arr);arrBinaryTree.p…

分布式事务与一致性算法Paxos amp; raft amp; zab

1.CAP原理 要想数据高可用&#xff0c;就得写多份数据写多分数据就会导致数据一致性问题数据一致性问题会引起性能问题 2.一致性模型 弱一致性最终一致性&#xff08;一段时间达到一致性&#xff09;强一致 1、2 异步冗余&#xff1b;3是同步冗余 3. 扩展服务的方案 数据分区&…

sh(Spring+Spring mvc+hibernate)——IEmpDao.java

/** * Title: IEmpDao.java * Package org.dao * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-11-21 上午9:43:52 * version V1.0 */ package org.dao;import java.util.List;import org.entity.Emp;/** * * 项…

打开数据库_数据库客户端navicat遇到问题怎么办?

前面的文章介绍了&#xff1a;mysql数据库如何安装&#xff0c;客户端navicat如何安装。下面是客户端navicat使用过程中常见问题的解决办法。【问】使用navicat连接数据库报错信息&#xff1a;12511251Client does not support authentication protocol requested by server,co…

关于MybatisPlus查询条件 or 并集 某字段空字符串和NULL问题 sql

下面的史对的 <select id"getHouseIsExist" resultType"com.easy.hotel.pms.api.entity.House" >select * from house h<where>h.del_flag 0<if test"estateId ! null and estateId ! ">and h.estate_id #{estateId}</i…