解决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 相关文章推荐
jQuery学习笔记之jQuery构建函数的7种方法
Jun 03 Javascript
jQuery中:first选择器用法实例
Dec 30 Javascript
JQuery中extend的用法实例分析
Feb 08 Javascript
深入理解JavaScript系列(41):设计模式之模板方法详解
Mar 04 Javascript
JavaScript中的原型prototype属性使用详解
Jun 05 Javascript
Angularjs 滚动加载更多数据
Mar 17 Javascript
JS 在数组指定位置插入/删除数据的方法
Jan 12 Javascript
整理关于Bootstrap表单的慕课笔记
Mar 29 Javascript
vue-router重定向不刷新问题的解决
Jun 25 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
Jul 25 jQuery
vue开发环境配置跨域的方法步骤
Jan 16 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
Nov 04 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
生成php程序的php代码
2008/04/07 PHP
PHP字符串的连接的简单实例
2013/12/30 PHP
php常用图片处理类
2016/03/16 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
PHP实现限制IP访问及提交次数的方法详解
2017/07/17 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
php操作redis命令及代码实例大全
2020/11/19 PHP
浅谈javascript 面向对象编程
2009/10/28 Javascript
js对象之JS入门之Array对象操作小结
2011/01/09 Javascript
js简易namespace管理器 实例代码
2013/06/21 Javascript
Node.js中安全调用系统命令的方法(避免注入安全漏洞)
2014/12/05 Javascript
jQuery动态修改超链接地址的方法
2015/02/13 Javascript
使用Browserify配合jQuery进行编程的超级指南
2015/07/28 Javascript
你不知道的高性能JAVASCRIPT
2016/01/18 Javascript
基于Javascript实现倒计时功能
2016/02/22 Javascript
字符串反转_JavaScript
2016/04/28 Javascript
js仿小米官网图片轮播特效
2016/09/29 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
mpvue项目中使用第三方UI组件库的方法
2018/09/30 Javascript
nodejs如何在package.json中设置多条启动命令
2020/03/16 NodeJs
VUE+Element实现增删改查的示例源码
2020/11/23 Vue.js
Python 处理数据的实例详解
2017/08/10 Python
Python 字符串与数字输出方法
2018/07/16 Python
pygame游戏之旅 添加碰撞效果的方法
2018/11/20 Python
python添加模块搜索路径和包的导入方法
2019/01/19 Python
python实现监控阿里云账户余额功能
2019/12/16 Python
de Bijenkorf比利时官网:荷兰最知名的百货商店
2017/06/29 全球购物
美国床垫连锁店:Mattress Firm
2021/02/13 全球购物
高校生生产实习自我鉴定
2013/09/21 职场文书
师范大学音乐表演专业求职信
2013/10/23 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
费用申请报告范文
2015/05/15 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书
2016年企业安全生产月活动总结
2016/04/06 职场文书
Html分层的box-shadow效果的示例代码
2021/03/30 HTML / CSS
Python使用scapy模块发包收包
2021/05/07 Python