swiper 循環模式下的Echarts圖展示問題小結


技術棧vue + swiper + echarts 

1.0遇到的問題

swiper開啟loop循環模式,每一個slide中包含一個echarts圖,使用以前通用的模式循環在echarts中使用id或者$refs獲取元素初始化,出現循環的echarts圖不顯示,但是slide中的文本沒有影響,

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遇到的問題

使用class類循環初始化,但是echarts圖還是不顯示,

Key: 猜測可能是循環顯示的時機問題,添加定時將執行時機滯后,顯示成功,

 

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

 

3.0 遇到的問題

echarts圖數據錯亂

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           }

 

 

一、個人小結

 

其中的坑主要是開啟loop循環的時候常用的獲取$ref或者id初始化,導致的問題,執行的時機,復制的順序是解題的關鍵


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM