1. 程式人生 > 程式設計 >解決vue一個頁面中複用同一個echarts元件的問題

解決vue一個頁面中複用同一個echarts元件的問題

因為頁面中要用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,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元件的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。