解决vue一个页面中复用同一个echarts组件的问题


Posted in Javascript onJuly 19, 2020

因为页面中要用echarts图表的地方比较多,所以封装了组件,方便复用,如图:

我需要这样一个饼图,并且接下来在很多次地方要用到。

解决vue一个页面中复用同一个echarts组件的问题

直接复制官网的代码,再改改数据,需要用的时候直接拿来用。

但是接下来出现了一个问题:如果我在同一个页面多次使用这个组件,图表将不能正常显示。分析了一下, echarts通过id获取对象

// 基于准备好的dom,初始化echarts实例

var myChart = echarts.init(document.getElementById('main'));

当封装为组件使用的时候,id固定,同一个页面多次出现相同id,所以不能正常显示。

所以想出来以下解决方案:

举个栗子,如果我需要在一个页面中使用该组件两次,

在组件的data中,另外赋一个变量,暂且定为type。在父组件的data中,第一个图标的数据pieData1中添加一个type:1,第二个添加一个type:2

pieData1:{
 type: 1,
 title: '失败次数',
 list:[
  {value:335, name:'502 Bad Gateway'},
  {value:310, name:'404 Not Found'},
  {value:234, name:'无法连接服务器'},
  {value:135, name:'请求超时'},
  {value:1548, name:'Trace LOSS'},
 ],
 pieStyle: {
  width: '400px',
  height: '400px',
  float: 'right'
 }
 },
 
 pieData2:{
 type: 2,
 title: '失败次数',
 list:[
  {value:335, name:'502 Bad Gateway'},
  {value:310, name:'404 Not Found'},
  {value:234, name:'无法连接服务器'},
  {value:135, name:'请求超时'},
  {value:1548, name:'Trace LOSS'},
 ],
 pieStyle: {
  width: '400px',
  height: '400px',
  float: 'right'
 }
 }

接下来改需要在同一个vue页面中用两次的子组件:

html:

<div id="demo1" :style="pieStyle" v-if="pieData.type==1"></div>

<div id="demo2" :style="pieStyle" v-if="pieData.type==2"></div>

js:

var myPie 
 if(this.pieData.type==1){
 myPie = echarts.init(document.getElementById("demo1"));
 }else if(this.pieData.type==2){
 myPie = echarts.init(document.getElementById("demo2"));
 }

好了,问题解决了,效果图如下:

解决vue一个页面中复用同一个echarts组件的问题

如果想到其它方法再补充。

补充知识:vue中,封装的Echart组件被同一个页面多次调用,数据被覆盖问题解决办法。

大概率是echarts init有问题,是不是用class或id选择器选择元素来init了

错误版本:

解决vue一个页面中复用同一个echarts组件的问题

解决vue一个页面中复用同一个echarts组件的问题

正确版本:

解决vue一个页面中复用同一个echarts组件的问题

解决vue一个页面中复用同一个echarts组件的问题

以上这篇解决vue一个页面中复用同一个echarts组件的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
Jul 31 Javascript
探讨:JavaScript ECAMScript5 新特性之get/set访问器
May 05 Javascript
js实现可控制左右方向的无缝滚动效果
May 29 Javascript
JavaScript 闭包机制详解及实例代码
Oct 10 Javascript
Bootstrap企业网站实战项目4
Oct 14 Javascript
jQuery中绑定事件bind() on() live() one()的异同
Feb 23 Javascript
jquery 手势密码插件
Mar 17 Javascript
关于使用js算总价的问题
Jun 23 Javascript
Node.js EventEmmitter事件监听器用法实例分析
Jan 07 Javascript
基于vue手写tree插件的那点事儿
Aug 20 Javascript
node.js处理前端提交的GET请求
Aug 30 Javascript
JavaScript实现简易计算器小功能
Oct 22 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
Jul 19 #Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
Jul 19 #Javascript
JavaScript中reduce()的5个基本用法示例
Jul 19 #Javascript
JS中作用域以及变量范围分析
Jul 18 #Javascript
JS中的变量作用域(console版)
Jul 18 #Javascript
js里面的变量范围分享
Jul 18 #Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
Jul 18 #Javascript
You might like
用Flash图形化数据(二)
2006/10/09 PHP
php中将网址转换为超链接的函数
2011/09/02 PHP
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
THINKPHP2.0到3.0有哪些改进之处
2015/01/04 PHP
一个对于js this关键字的问题
2007/01/09 Javascript
Dom 结点创建 基础知识
2011/10/01 Javascript
nodejs中实现阻塞实例
2015/03/24 NodeJs
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
js 调用百度分享功能
2017/02/27 Javascript
npm国内镜像 安装失败的几种解决方案
2017/06/04 Javascript
jQuery 禁止表单用户名、密码自动填充功能
2017/10/30 jQuery
vsCode安装使用教程和插件安装方法
2020/08/24 Javascript
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
Python实现的ini文件操作类分享
2014/11/20 Python
python中zip和unzip数据的方法
2015/05/27 Python
python安装oracle扩展及数据库连接方法
2017/02/21 Python
python opencv之SIFT算法示例
2018/02/24 Python
python unittest实现api自动化测试
2018/04/04 Python
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
利用Python实现微信找房机器人实例教程
2019/03/10 Python
Django中使用session保持用户登陆连接的例子
2019/08/06 Python
Python threading的使用方法解析
2019/08/28 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
Python 支持向量机分类器的实现
2020/01/15 Python
在TensorFlow中屏蔽warning的方式
2020/02/04 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
使用html5新特性轻松监听任何App自带返回键的示例
2018/03/13 HTML / CSS
美国最大的香水连锁店官网:Perfumania
2016/08/15 全球购物
全球性的在线鞋类品牌:Public Desire
2019/04/03 全球购物
UNOde50美国官网:西班牙珠宝品牌
2020/08/15 全球购物
《陈毅探母》教学反思
2014/05/01 职场文书
2015年毕业实习工作总结
2014/12/12 职场文书
校运会新闻稿
2015/07/17 职场文书
大学生党课心得体会
2016/01/07 职场文书
SQL Server 数据库实验课第五周——常用查询条件
2021/04/05 SQL Server
利用JavaScript写一个简单计算器
2021/11/27 Javascript