前言
最近在學習eCharts,學習到了異步更新和數據加載這一塊,覺著有必要總結一下,方法以后的時候參考學習,在開始本文之前,對eCharts不熟悉的朋友們可以參考下這篇文章://www.49028c.com/article/128790.htm 下面話不多說了,來一起看看詳細的介紹吧。
使用方法
使用Echarts首先得先把Echarts.js引進來(放在文件的入口html文件里面)
<script src="public/js/echarts.common.min.js"></script>
在繪圖前我們需要為 ECharts 準備一個具備高寬的 DOM 容器
<div id="main" style="width: 600px;height:400px;"></div>
初始化一個 echarts 實例并通過 setOption 方法生成一個你想要的圖表類型,
首先先把,echarts里setOption的option,單獨領出來,初始化放在data里
data() { return { getSetOption: {//折線圖 title: { text: null }, tooltip: { trigger: 'axis' }, grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true }, yAxis: { type: 'value' }, legend: { data: [] }, xAxis: { type: 'category', data: [] }, series: [ { name: null, type: 'line', stack: '總人數', data: [] } ] }, getPieOption: {//餅圖 title: { text: null }, tooltip: { tooltip: 'item', formatter: "{a} <br/> : {c} (ttlddrd%)" }, series : [ { type: 'pie', radius: '55%', data:[ ].sort(function(a,b){return a.value - b.value;}), roseType: 'angle', } ] }, }}
下面是在methods里初始化的一個方法,
drawLineChart() { this.lineChartOrder = echarts.init(document.getElementById('lineChartOrder')); this.lineChartOrder.setOption(this.getSetOption); },
然后在mounted里調用這個方法
this.drawLineChart(),
接下來就就是數據異步加載與更新了。
以下的代碼是本地的json類型,異步加載數據時只要填入數據,然后在series里根據名字對應到相應的系列就可以了。
getOrderTotal(){//獲取一段時間內的訂單統計 api.getOrderStatistical(this.begin, this.end,this.kId) .then(res => { if (res.data.ok && res.data.r.length) { const results = res.data.r, legends = results.map(item => ({ name: item.channelName, data: item.dateStatisticals })) this.lineChartOrder.setOption({ title: { text: '訂單統計' }, legend: { data: legends.map(item => item.name) }, xAxis: { data: legends[0].data.map(item => item.date) }, series: legends.map(item => { return { type: 'line', name: item.name, data: item.data.map(item => item.count) } }) }) } }).catch(err => { // console.log(err) })
但是,echarts的數據是直接merge的,所以當出現多條折線時,如果當天的數據為0,或者后臺傳過來的數據為空的時候,setOption的值根本就沒有更新,而是直接merge了,所以這個問題就頭大了。
對于這個問題的解決方法是
用getOption取到已經存在的option, 然后用this.lineChartOrder.setOption.clear()
,清空option,最后this.lineChartOrder.setOption(option, false, false)
。
這樣就可以清掉了。
以下是官網異步數據加載與更新的方法,會相對簡單些。
// 異步加載數據 $.get('data.json').done(function (data) {// 填入數據 myChart.setOption({ xAxis: { data: data.categories }, series: [{ // 根據名字對應到相應的系列 name: '銷量', data: data.data }]});
只需要將數據填充進入就可以了。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。
新聞熱點
疑難解答