解决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 相关文章推荐
为JavaScript添加重载函数的辅助方法
Jul 04 Javascript
中止javascript执行的方法
Feb 14 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
Dec 31 Javascript
浅谈js多维数组和hash数组定义和使用
Jul 27 Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
Sep 02 Javascript
jquery——九宫格大转盘抽奖实例
Jan 16 Javascript
js模拟支付宝密码输入框
Apr 11 Javascript
jQuery中的for循环var与let的区别
Apr 21 jQuery
了解重排与重绘
May 29 Javascript
小程序实现左滑删除效果
Jul 25 Javascript
vue如何使用外部特殊字体的操作
Jul 30 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
Aug 18 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
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
ThinkPHP单字母函数(快捷方法)使用总结
2014/07/23 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
jQuery中选择器小问题(新人难免遇到)
2014/03/31 Javascript
JS控制输入框内字符串长度
2014/05/21 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
js实现精美的图片跟随鼠标效果实例
2015/05/16 Javascript
学习JavaScript鼠标响应事件
2015/12/25 Javascript
基于jQuery实现仿百度首页选项卡切换效果
2016/05/29 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
2017/03/08 Javascript
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
vuejs实现折叠面板展开收缩动画效果
2018/09/06 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
微信小程序dom操作的替代思路实例分析
2018/12/06 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
2019/07/05 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
JavaScript 变量,数据类型基础实例详解【变量、字符串、数组、对象等】
2020/01/04 Javascript
[01:03:27]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python中random模块用法实例分析
2015/05/19 Python
深入学习Python中的上下文管理器与else块
2017/08/27 Python
对numpy的array和python中自带的list之间相互转化详解
2018/04/13 Python
Python常见字典内建函数用法示例
2018/05/14 Python
python 检查是否为中文字符串的方法
2018/12/28 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
Python后台开发Django会话控制的实现
2019/04/15 Python
python多线程共享变量的使用和效率方法
2019/07/16 Python
Python散点图与折线图绘制过程解析
2019/11/30 Python
使用opencv将视频帧转成图片输出
2019/12/10 Python
Python迷宫生成和迷宫破解算法实例
2019/12/24 Python
python deque模块简单使用代码实例
2020/03/12 Python
逻辑链路控制协议
2016/10/01 面试题
体育教师工作总结的自我评价
2013/10/10 职场文书
后勤主管岗位职责
2014/03/01 职场文书
国培计划培训感言
2014/03/11 职场文书
交通事故协议书范本
2014/11/18 职场文书
mysql多表查询-笔记七
2021/04/05 MySQL