解决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 相关文章推荐
Extjs gridpanel 出现横向滚动条问题的解决方法
Jul 04 Javascript
JsRender for object语法简介
Oct 31 Javascript
js的[defer]和[async]属性
Nov 24 Javascript
node.js 使用ejs模板引擎时后缀换成.html
Apr 22 Javascript
浅谈window对象的scrollBy()方法
Jul 15 Javascript
Javascript中apply、call、bind的巧妙使用
Aug 18 Javascript
微信小程序 ecshop地址三级联动实现实例代码
Feb 28 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
Nov 22 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
May 21 Javascript
jQuery 操作 HTML 元素和属性的方法
Nov 12 jQuery
vuex actions异步修改状态的实例详解
Nov 06 Javascript
js prototype深入理解及应用实例分析
Nov 25 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
轻松入门: 煮好咖啡的七个诀窍
2021/03/03 冲泡冲煮
杏林同学录(二)
2006/10/09 PHP
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
PHP生成图片验证码、点击切换实例
2014/06/25 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
2017/10/26 PHP
PHP树形结构tree类用法示例
2019/02/01 PHP
url 编码 js url传参中文乱码解决方案
2010/04/11 Javascript
ExtJs GridPanel简单的增删改实现代码
2010/08/26 Javascript
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
2012/09/19 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
node.js中的fs.rmdir方法使用说明
2014/12/16 Javascript
jQuery中:first-child选择器用法实例
2014/12/31 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
深入理解Node.js的HTTP模块
2016/10/12 Javascript
ajax分页效果(bootstrap模态框)
2017/01/23 Javascript
Node.js Express安装与使用教程
2018/05/11 Javascript
JS原型与继承操作示例
2019/05/09 Javascript
[51:52]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
用python 制作图片转pdf工具
2015/01/30 Python
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
Python3 Random模块代码详解
2017/12/04 Python
对python数据切割归并算法的实例讲解
2018/12/12 Python
numpy 返回函数的上三角矩阵实例
2019/11/25 Python
波兰在线儿童和婴儿用品零售商:pinkorblue
2019/06/29 全球购物
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
Laravel的加密解密与哈希实例讲解
2021/03/24 PHP
实习生的自我评价
2014/01/08 职场文书
乡镇干部十八大感言
2014/02/17 职场文书
电子商务专业求职信
2014/03/08 职场文书
精彩广告词大全
2014/03/19 职场文书
房屋转让协议书
2014/04/11 职场文书
党员个人查摆剖析材料
2014/10/16 职场文书
医者仁心观后感
2015/06/17 职场文书
小学班级口号大全
2015/12/25 职场文书