說明
做專案的時候為了讓資料展示的更加直觀,總會用到圖表相關的控制元件,而說到圖表控制元件第一時間當然想到ECharts這個開源專案,而它不像iview、element-ui這些元件使用起來那麼便捷,需要繞一個小彎,為了圖方便於是對ECharts進行了一層封裝
控制元件演示
控制元件使用
概要
- 基於echarts的二次封裝
- 由資料驅動
- 控制元件原始碼見src/components/charts
文件
- props
屬性 | 說明 | 型別 |
---|---|---|
_id | 圖表唯一標識,當id重複將會報錯 | String |
_titleText | 圖表標題 | String |
_xText | x軸描述 | String |
_yText | y軸描述 | String |
_chartData | 圖表資料 | Array |
_type | 圖表型別,提供三種(LineAndBar/LineOrBar/Pie) | String |
- 呼叫示例
<chart
:_id="'testCharts'"
:_titleText="'訪問量統計'"
:_xText="'類別'"
:_yText="'總訪問量'"
:_chartData="chartData"
:_type="'Pie'"></chart>
//測試資料樣例 [["類別1",10],["類別2",20]]複製程式碼
實現方式
- 建立一個待渲染的dom
<template> <div :id="_id" class="chart"></div> </template>複製程式碼
- 繪製函式
function drawPie(chartData,id,titleText,xText,yText) { var chart = echarts.init(document.getElementById(id)) var xAxisData = chartData.map(function (item) {return item[0]}) var pieData = [] chartData.forEach((v,i)=>{ pieData.push({ name:v[0], value:v[1] }) }) chart.setOption({ title : { text: titleText, subtext: '', x:'center' }, tooltip : { trigger: 'item', formatter: "{a} <br/>{b} : {c} ({d}%)" }, legend: { orient: 'vertical', left: 'left', data: xAxisData }, series : [ { name: xText, type: 'pie', radius : '55%', center: ['50%', '60%'], data:pieData, itemStyle: { emphasis: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' } } } ] }) }複製程式碼
- 掛載結束、資料來源改變時重繪
watch:{ _chartData(val){ switch (this._type){ case "LineAndBar": drawLineAndBar(val,this._id,this._titleText,this._xText,this._yText); break case "LineOrBar": drawLineOrBar(val,this._id,this._titleText,this._xText,this._yText); break case "Pie": drawPie(val,this._id,this._titleText,this._xText,this._yText); break default: drawLineAndBar(val,this._id,this._titleText,this._xText,this._yText); break } } }, mounted() { switch (this._type){ case "LineAndBar": drawLineAndBar(this._chartData,this._id,this._titleText,this._xText,this._yText); break case "LineOrBar": drawLineOrBar(this._chartData,this._id,this._titleText,this._xText,this._yText); break case "Pie": drawPie(this._chartData,this._id,this._titleText,this._xText,this._yText); break default: drawLineAndBar(this._chartData,this._id,this._titleText,this._xText,this._yText); break } }複製程式碼
如果覺得有用,歡迎star calebman/vue-DBM