swiper 循环模式下的Echarts图展现问题小结

技术栈vue + swiper + echarts vue

1.0遇到的问题echarts

swiper开启loop循环模式,每个slide中包含一个echarts图,使用之前通用的模式循环在echarts中使用id或者$refs获取元素初始化,出现循环的echarts图不显示,可是slide中的文本没有影响,dom

Key : 百度了一下,有网友提到,是id或者说$ref复制重复致使,以后采用class类循环初始化解决问题编辑器

1                 var mytest=document.getElementsByClassName('doubleCubes'); 2                 if(mytest&&mytest.length>1){ 3                     for(var i=0;i<mytest.length;i++){ 4                         var myChart = echarts.init(mytest[i]); 5                         myChart.setOption(this.option); 6  } 7                 }

 

2.0遇到的问题ide

使用class类循环初始化,可是echarts图仍是不显示,oop

Key: 猜想多是循环显示的时机问题,添加定时将执行时机滞后,显示成功,this

 

1       let that = this; 2         setTimeout(()=>{ 3              this.$nextTick(()=>{ 4                  this.initChart(); 5      }) 6       },0)

 

3.0 遇到的问题spa

echarts图数据错乱code

Key: 经过数据打印发现使用class类循环的echarts图一直会展现最后一个使用的数据,数据不具备惟一性,解决办法,轮播图复制的slide使用class特定的echarts初始化,其余的仍是使用id或者$ref初始化 ,解决问题对象

 

4.0 遇到的问题

客户反映,轮播图复制的部分必须使用特定的echart图,编辑器操做不太方便,但愿改进

Key:

思路一echarts图初始化的时候进行判断,若是哪一个存在则使用哪个。失败

思路二多是id不具备惟一性,若是动态生成id使id具备惟一性是否解决class类循环的不惟一致使的echarts图数据错乱问题,结果发现复制的数据上 math.random生成的id也被复制 失败

思路三执行的时机,须要在轮播图初始化后再初始化echarts图,

第一种   echarts图初始化在其父组件swiper初始化完后执行,由于封装的层数太多没法实现,

考虑第二种  方法将class类绑定到echartbox组件上,由于文本的复制并无致使问题,因此将值传入echarts中,在echarts中初始化的时候遍历同一个轮播图中的class类,

1       <div class="echarts-box " :class= " `echarts-box${IdFlag} `" >   
2           <all-charts  :model-type="modelTypeArr" :model-name="tempList.modelName"  :chart-name="tempList.chartName" >
3           </all-charts>
4       </div>

获取其子元素echarts的对象而后初始化。这样每个echarts的初始化对象就是惟一的。

 

 1        initChart(){  2                 if(this.modelTypeArr.includes('ratioEcharts') ) {  3                     // 获取父元素的类名 
 4                     let dom = document.getElementsByClassName(`echarts-box${this.modelName}`)  5                     for(var i=0;i<dom.length;i++){  6                         var mytest= dom[i].children[0].children[0]  7                         var myChart = echarts.init(mytest);  8                         myChart.setOption(this.option);  9  } 10  } 11           }

 

 

1、我的小结

 

其中的坑主要是开启loop循环的时候经常使用的获取$ref或者id初始化,致使的问题,执行的时机,复制的顺序是解题的关键

相关文章
相关标签/搜索