新聞中心
怎么在vue中將echart封裝為組件,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
1. 安裝Echarts
首先第一步,肯定是安裝Echarts了。通過cd命令進入項目根目錄,然后敲以下命令行:
cnpm install echarts -S
安裝成功會如下顯示,package.json里的dependencies屬性也會自動加上Echarts依賴:
安裝Echarts
package.json
2.在vue項目中使用Echarts
安裝成功以后,我們先要考慮的是如何在vue項目中導(dǎo)入Echarts,并成功初始化一個圖表。
下面我會先建兩個.vue文件 chart.vue 和 radar-chart.vue 作為這次示例的基礎(chǔ)。 chart.vue的角色是調(diào)用雷達圖,radar-chart.vue的角色是提供雷達圖:
//chart.vue
//radar-chart.vue
好,正式創(chuàng)建一個Echarts圖表了
(1)在radar-chart.vue導(dǎo)入echart :
// 引入基本模板 import echarts from 'echarts/lib/echarts' // 引入雷達圖組件 import 'echarts/lib/chart/radar' // 引入提示框和圖例組件 import 'echarts/lib/component/tooltip' import 'echarts/lib/component/legend'
(2)創(chuàng)建圖表配置數(shù)據(jù),數(shù)據(jù)格式參考 Echarts官網(wǎng):
const option = { tooltip: {}, radar: { indicator: [{name: '體育', max: '100'}, {name: '數(shù)學(xué)', max: '100'}, {name: '化學(xué)', max: '100'}, {name: '勞動', max: '100'}, {name: '物理', max: '100'}], center: ['50%', '51%'] }, series: [{ type: 'radar', itemStyle: {normal: {areaStyle: {type: 'default'}}}, data: [ { value: [58,56,78,64,98], name: '各項得分', itemStyle: {normal: {color: '#f0ad4e'}} } ] }] }
(3)初始化圖表:
const chartObj = echarts.init(document.getElementById('radar')) chartObj.setOption(option)
上面幾步匯總為以下代碼,另外補充一點就是,創(chuàng)建配置數(shù)據(jù)option和初始化的時候,都要放在mounted鉤子函數(shù)里執(zhí)行,這樣才能保證獲取dom的是時候,dom已完成渲染:
//chart.vue
//radar-chart.vue
出來的效果是這樣的:
效果一
3.將Echarts封裝為組件
上面我們已經(jīng)成功創(chuàng)建一個雷達圖了,但是很明顯的是,radar-chart.vue里的數(shù)據(jù)寫死的,無法重復(fù)調(diào)用。接下來著手封裝的事情了。
封裝的思路是這樣的:
(1)chart.vue向radar-chart.vue傳遞一組個性化數(shù)據(jù)
(2)radar-chart.vue通過props選項接收數(shù)據(jù)
(3)提煉接收到的數(shù)據(jù),覆蓋配置數(shù)據(jù)option
(4)初始化圖表
(如果對如何傳遞數(shù)據(jù)不理解,可以先看看我在開始的時候提到的,我的另一篇文章 —— “ vue之父子組件間通信實例講解(props、$ref 、 $emit )”)
具體代碼如下:
//chart.vue (父組件)//傳遞在子組件prop選項里約定好的數(shù)據(jù)
//radar-chart.vue (子組件)
封裝以后,就能傳遞自定義的數(shù)據(jù),反復(fù)調(diào)用了。上面代碼最后的效果是這樣的:
效果二
4.細節(jié)優(yōu)化
基本的功能已經(jīng)實現(xiàn)了,下面我們來優(yōu)化下一些細節(jié)。
不知道大家有沒發(fā)現(xiàn)radar-chart.vue里的-id是寫死的,這會出現(xiàn)什么問題?當一個頁面調(diào)用兩次這個雷達圖組件,id就會重復(fù)了,從而報錯。
為了解決這個問題,我引入了uuid(vue-cli項目自帶,不需另外安裝),意在為每個生成的雷達圖配一個不重復(fù)的隨機id。還需要注意的是,我們要在created()方法里去做這個生成id的事情,如果寫在mounted了就會出現(xiàn)無法初始化的情況,因為來不及渲染新的ID,就執(zhí)行document.getElementById()了,具體代碼如下:
成功解決重復(fù)id的問題:
看完上述內(nèi)容,你們掌握怎么在vue中將echart封裝為組件的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
分享文章:怎么在vue中將echart封裝為組件-創(chuàng)新互聯(lián)
當前鏈接:http://fisionsoft.com.cn/article/dsgopd.html