淺談vue單頁(yè)面中有多個(gè)echarts圖表時(shí)的公用代碼寫(xiě)法
html中:
<div class="charts1"/> <div class="charts2"/> <div class="charts3"/> <div class="charts4"/> <div class="charts5"/> <div class="charts6"/> <div class="charts7"/>
數(shù)據(jù)處理就不用提了。嗯,直接畫(huà)圖:
// 畫(huà) 折線圖 drawLine() { // 數(shù)據(jù)處理的方法 this.dealEchartsData() var myChartsArr = [] for (var i = 1; i <= 7; i++) { this.myCharts = this.$echarts.init(document.getElementsByClassName('charts' + i)[0]) myChartsArr.push(this.myCharts) var option = this.commonOption(this.myCharts, this.adnormalTypeSummery[i - 1], this.destArrAll[i - 1]) // 為echarts對(duì)象加載數(shù)據(jù) true 防止echarts數(shù)據(jù)疊加!??! this.myCharts.setOption(option, true) } window.onresize = function() { // 自適應(yīng) for (var j = 0; j < myChartsArr.length; j++) { if (myChartsArr[j].resize()) { myChartsArr[j].resize() } } } },
公用部分:
// option 主體 commonOption(myCharts, titleText, destData) { var option = { title: { text: titleText }, tooltip: { trigger: 'axis', confine: true }, legend: { type: 'scroll', width: '90%', top: '13%' }, grid: { left: '3%', right: '4%', bottom: '2%', containLabel: true }, toolbox: { right: '20', feature: { saveAsImage: {} } }, xAxis: { type: 'category', boundaryGap: false, data: this.monthName }, yAxis: { type: 'value' }, series: destData } return option }
離開(kāi)該頁(yè)面時(shí)候摧毀:
destroyed() { if (this.myCharts) { this.myCharts.clear() this.myCharts.dispose() window.onresize = null }
補(bǔ)充知識(shí):Vue + Echarts 圖表展示 及 動(dòng)態(tài)渲染
準(zhǔn)備工作
安裝echarts依賴(lài)
npm install echarts --save-dev
引入
(main.js) import echarts from 'echarts' Vue.prototype.$echarts = echarts;
開(kāi)始擼代碼
<template> <div class="peopleWrap"> <h3> <i class="el-icon-position"></i> 出入人員總數(shù){{peopleSumTotal}} </h3> <div id="peopleSum" style="width: 180px;height: 270px"></div> </div> </template> <script> export default { // 接受父組件傳來(lái)的參數(shù)【父?jìng)髯觩rops】 props: ["peopleSumTotal"], data() { return { peopleSumTotalArr: [] }; }, watch: { // 監(jiān)聽(tīng)參數(shù)變化 peopleSumTotal: { handler(newVal, oldVal) { if (newVal != 0) { console.log(newVal); this.peopleSum(newVal); } } } }, methods: { peopleSum(newVal) { // 引入 echarts var echarts = require("echarts"); let peopleSum = echarts.init(document.getElementById("peopleSum")); //echsrts點(diǎn)擊事件 peopleSum.on("click", function(param) { console.log(param); console.log(param.data.name); console.log(param.data.value); console.log(param.data.userDefined); //$emit的第一個(gè)為傳的參的名字,第二個(gè)為傳的值 【子傳父 this.$emit】 _this.$emit("peopleSumtoparent", param.data); }); //接受動(dòng)態(tài)數(shù)據(jù)時(shí)需要在 this.$nextTick(()=>{})展示 this.$nextTick(() => { let obj = {}; obj.value = newVal; obj.name = newVal; this.peopleSumTotalArr.push(obj); let option = { legend: { orient: "vertical", left: 10, data: [""] }, series: [ { type: "pie", radius: ["50%", "70%"], avoidLabelOverlap: false, itemStyle: { // 普通樣式。 normal: { // 點(diǎn)的顏色。 color: "#6998f7" }, // 高亮樣式。 emphasis: { // 高亮?xí)r點(diǎn)的顏色。 color: "#6998f7" } }, label: { normal: { show: true, position: "center", textStyle: { fontSize: "20" } } }, labelLine: { normal: { show: false } }, data: this.peopleSumTotalArr //動(dòng)態(tài)圖表展示 } ] }; console.log("option", option); peopleSum.setOption(option); }); } }, mounted() {} }; </script> <style lang="scss" scoped> </style>
以上這篇淺談vue單頁(yè)面中有多個(gè)echarts圖表時(shí)的公用代碼寫(xiě)法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vuex中actions優(yōu)雅處理接口請(qǐng)求的方法
在項(xiàng)目開(kāi)發(fā)中,如果使用到了 vuex,通常我會(huì)將所有的接口請(qǐng)求單獨(dú)用一個(gè)文件管理,這篇文章主要介紹了Vuex中actions如何優(yōu)雅處理接口請(qǐng)求,業(yè)務(wù)邏輯寫(xiě)在 actions 中,本文給大家分享完整流程需要的朋友可以參考下2022-11-11Vue中使用Openlayer實(shí)現(xiàn)加載動(dòng)畫(huà)效果
這篇文章主要介紹了Vue+Openlayer加載動(dòng)畫(huà)效果的實(shí)現(xiàn)代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08vue中計(jì)算屬性和方法的區(qū)別及說(shuō)明
這篇文章主要介紹了vue中計(jì)算屬性和方法的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09ResizeObserver?loop?limit?exceeded報(bào)錯(cuò)原因及解決方案
這篇文章主要給大家介紹了關(guān)于ResizeObserver?loop?limit?exceeded報(bào)錯(cuò)原因及解決的相關(guān)資料,公司項(xiàng)目監(jiān)聽(tīng)系統(tǒng)中發(fā)現(xiàn)一個(gè)高頻錯(cuò)誤ResizeObserver loop limit exceeded,而瀏覽器的console中卻沒(méi)有提示,需要的朋友可以參考下2023-09-09在 Vue-CLI 中引入 simple-mock實(shí)現(xiàn)簡(jiǎn)易的 API Mock 接口數(shù)據(jù)模擬
本文以 Vue-CLI 為例介紹引入 simple-mock 實(shí)現(xiàn)前端開(kāi)發(fā)數(shù)據(jù)模擬的步驟。感興趣的朋友跟隨小編一起看看吧2018-11-11