您好,登錄后才能下訂單哦!
這期內(nèi)容當中小編將會給大家?guī)碛嘘Pecharts如何在Vue中使用,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
1. 存放在vuex中
這么大型的項目,vuex少不了。在前面的組件中,一次請求數(shù)據(jù),然后將數(shù)據(jù)存儲到了vuex中,echarts組件再從vuex中獲取數(shù)據(jù)。這樣的做法可能代碼要稍微復雜點,但是數(shù)據(jù)存儲在vuex中是隨時可見的,我們也能隨時保存獲取的結(jié)果,對這些數(shù)據(jù)可以添加收藏也可以加入緩存中,下次再請求可以先從緩存調(diào)用。
(然而這只是我前端的想法,后臺已經(jīng)實現(xiàn)了對請求數(shù)據(jù)的緩存)
2. 存放在組件中,再分派到echarts組件
再對數(shù)據(jù)進行還原的時候(我的收藏,最近瀏覽),因為不需要保存或者收藏數(shù)據(jù),我就直接用一個父組件請求,然后再分發(fā)到echarts組件,這樣沒有經(jīng)過vuex,代碼想多要少些。
組件代碼
<template> <div class="r-echarts-line"> <div class="top"> <div class="title"> {{origin.title}} </div> <div class="select-list"> <Select v-model="pagePick"> <Option v-for="item in origin.page_select" :key="item" :value="item.val">{{item.name}}</Option> </Select> <Select v-model="typePick"> <Option v-for="item in typeList" :value="item.name" :key="item">{{item.name}}</Option> </Select> </div> </div> <div class="des">說明:符合于本次篩選條件的共有<span class='tips'>{{origin.desc}}</span>條<span >職位信息</span>。</div> <div class="bottom" id="echart" ref="mychart"> </div> </div> </template>
這是組件的html部分,可以看見top以及des是我自己添加的,bottom才是核心,也是整個echarts展示的部分,注意這里添加了ref,在script的代碼中,我們將通過這個鉤子,將DOM掛載到echarts中
<script> // echarts相關 let echarts = require('echarts/lib/echarts'); require('echarts/lib/chart/bar'); require('echarts/lib/component/tooltip'); require('echarts/lib/component/toolbox'); require('echarts/lib/component/legend'); require('echarts/lib/component/markLine'); export default { name: 'r-echarts-line', data () { return { typePick: '數(shù)值', typeList: [ { name: '數(shù)值' }, { name: '百分比' } ], pagePick: 0, // myChart實例 myChart: {}, percent: { label: { normal: { show: true, position: 'inside', formatter: '{c}%' } } }, numeric: { label: { normal: { show: true, position: 'inside', formatter: '{c}' } } } } }, props: { index: { required: true, type: Number }, data: { required: true, type: Object } }, mounted () { this.setEchart(); }, updated () { if (!this.myChart) { this.setEchart(); } this.chartChange(); }, computed: { origin () { return this.data; }, opt() { let that = this; let obj = { color: ['#606c94'], tooltip: { }, toolbox: { show: true, feature: { saveAsImage: {show: true} } }, label: { normal: { show: true, position: 'inside', formatter: '{c}' }, emphasis: { show: true } }, xAxis: { type: 'value', }, yAxis: { data: that.origin[that.type][that.pagePick].key, axisLabel: { interval: 0, rotate: -30 } }, series: [{ name: that.origin.title, type: 'bar', data: that.origin[that.type][that.pagePick].val, barMaxWidth: '30', markLine: { data: [ {type: 'average', name: '平均值'} ] } }] } return obj; }, type () { if (this.typePick == '數(shù)值') { return 'numeric'; } else if (this.typePick == '百分比') { return 'percent'; } else { return 'numeric'; } } }, methods: { setEchart () { let dom = this.$refs.mychart; this.myChart = echarts.init(dom); this.myChart.setOption(this.opt); }, chartChange () { this.myChart.setOption(this.opt); if (this.typePick == '百分比') { this.myChart.setOption(this.percent); } if (this.typePick == '數(shù)值') { this.myChart.setOption(this.numeric); } } } } </script>
首先我引入了需要的echarts組件,這個部分通過npm i echarts -S添加。
接著data部分我設置了那些將會引起變化的參數(shù)。需要注意的是,我并沒有將echarts的opt部分寫入到data中,因為整個圖表是基于數(shù)據(jù)驅(qū)動的,并且隨時會發(fā)生變化,因此我將opt設置為計算屬性computed,這樣opt將會根據(jù)我的選擇動態(tài)變化,echarts也將動態(tài)響應,mychart用于接收echarts生成的圖表實例,再參數(shù)變換的時候?qū)鹱饔谩?/p>
props部分是我接收到的參數(shù),這個組件時基于前面我講的第二種方式——父組件獲取數(shù)據(jù)分發(fā),data是父組件分發(fā)給echarts的數(shù)據(jù)源。
暫時忽略兩個Vue生命周期鉤子, 后面講
計算屬性中設置了兩個屬性,origin和opt,注意這個origin很重要,通過它我將opt項與復雜的數(shù)據(jù)解耦,無論外面的數(shù)據(jù)怎么換,opt只關心origin的值,而這個opt在兩種數(shù)據(jù)獲取的方式中是不一樣的,使用vuex的方式,origin將會直接從vuex中獲取數(shù)據(jù)。這樣一定程度上也實現(xiàn)了組件的復用。
opt就是該圖表組件的設置項了,這個參數(shù)按照官網(wǎng)給的配置,自己搭配即可。
接下來是methods部分,setEchart將會完成對整個圖表的初始化,通過this.$refs獲取DOM實例,再由echars生成實例并綁定在data中的mychart選項。
chartChange是用來響應我自定義組件的變化的,針對選框的不同將會有不同的顯示情況。在這里是百分比和數(shù)據(jù)的切換
接著是前面忽略的生命周期部分
mounted里使用setEchart方法,初始化圖表組件,一定要在這里使用該方法,否則會找不到DOM
updated周期里是響應參數(shù)變化的方法,首先檢測該實例有沒有生成(單頁應用因為用戶可能存在的誤操作,很可能導致實例沒有生成,這里檢測是很有必要的),接著在vue中的數(shù)據(jù)發(fā)生改變時運行chartChange方法,注意,我的選擇框是沒有綁定事件的,只是通過v-model改變了參數(shù),然后opt動態(tài)響應了參數(shù)的變化。當opt的參數(shù)變化的時候,updated中的方法就會執(zhí)行,echarts也會動態(tài)響應。這個就是使用基于數(shù)據(jù)驅(qū)動vue最精巧的地方,避免了通過事件調(diào)用echartChange方法。也是vue中使用echarts核心的一環(huán)
另外還有一個就是獲取地圖參數(shù)的,并不用在官網(wǎng)里下載,提供的npm包里就有,按需引用就好了(使用官網(wǎng)的js版本會報錯沒找到echarts)
import echarts from 'echarts/lib/echarts'; import 'echarts/lib/chart/map'; import 'echarts/map/js/china.js';
style部分就沒什么好聊的了,只需要記住一點,必須顯式指定加載echarts 的DOM的寬度和高度
父組件對echarts組件的調(diào)用
調(diào)用組件的方法按照常規(guī)組件調(diào)用就好了,只是因為echarts加載數(shù)據(jù)繪制需要耗費不少時間,我們可能需要通過keep-alive保存組件在內(nèi)存中,避免切出去的時候被釋放了。另外可能一個頁面需要展示多個echarts類型組件,這里考慮使用component動態(tài)組件
<template> <div class="focus-echarts-wrap"> <keep-alive> <component :is="currentView" :index="focusType"></component> </keep-alive> </div> </template>
上述就是小編為大家分享的echarts如何在Vue中使用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。