Uniapp中使用Echarts的詳細(xì)過(guò)程
Uniapp中使用Echarts
這里只舉例折線圖。
一、視圖層
畫圖依賴于canvas標(biāo)簽,記得給它一個(gè)id名。
<template> <view class="dataTable"> <u-toast ref="uToast" /> <view class="dataTable-canvas"> <view class="dataTable-canvas-title"> <text> 近七日學(xué)生上報(bào)統(tǒng)計(jì) </text> </view> <canvas id="myEcharts"></canvas> </view> </view> </template>
二、邏輯層
<script> // 將npm方式下載的echarts插件引入進(jìn)來(lái) import * as echarts from 'echarts'; // 接口 import { getWeekStuReport } from '@/api/dataTable/dataTable.js'; export default { data() { return { // 這里初始化一個(gè)null,待會(huì)兒用來(lái)充當(dāng)echarts實(shí)例 myChart: null, } }, onLoad(options) { let that = this; // 通過(guò)nextTick異步畫圖 this.$nextTick(() => { that.drawLines(); }); }, beforeDestroy() { // 頁(yè)面關(guān)閉時(shí)銷毀echarts實(shí)例 this.myChart.clear(); this.myChart.dispose(); }, methods: { async drawLines() { // 這里是初始化的方式,通過(guò)id查詢找到你的canvas標(biāo)簽 this.myChart = echarts.init(document.getElementById('myEcharts')); // 這里我初始化了4個(gè)數(shù)組用來(lái)存放 后端接口給我的數(shù)據(jù) let data = []; let tian = []; let reportLine = []; let notReportLine = []; try { let res = await getWeekStuReport(); console.log(res); if (res.code != 0) { this.$refs.uToast.show({ title: res.message, type: 'error', duration: 3000, }); } else { data = res.result; data.forEach((item) => { // 從接口中提取自己想要的數(shù)據(jù) tian.push(item.type); reportLine.push(item.sbNum); notReportLine.push(item.notSbNum); }) } } catch (e) { console.log(e); } // 這里開(kāi)始就是echarts的配置項(xiàng)了 let option = { // x軸數(shù)據(jù) xAxis: { type: 'category', data: tian, }, // y軸數(shù)據(jù) yAxis: { type: 'value', }, // 這里寫2個(gè)對(duì)象是2條線條,3個(gè)則是3條 series: [ { // data使用剛才定義的數(shù)組,數(shù)據(jù)從后端接口中取得 data: reportLine, type: 'line', smooth: true, }, { data: notReportLine, type: 'line', smooth: true, }, ], grid: { // 這里可以防止Y軸顯示不全 containLabel: true } } // 這里不要忘記把option設(shè)置給echarts實(shí)例 this.myChart.setOption(option); // 這里是用于窗口變化時(shí)的自適應(yīng),利用的是echarts自帶的resize方法 // 如果你打印出來(lái)這個(gè)echarts實(shí)例,可以在函數(shù)里面找到這個(gè)方法 window.addEventListener('resize', () => { this.myChart.resize() }); }, }, } </script>
三、樣式
記得給canvas寬高就行。
<style scope lang="scss"> .dataTable{ padding: 10rpx; width: 100%; height: 100%; &-canvas { &-title { padding: 20rpx 0rpx; > text { padding-left: 20rpx; width: 100%; height: 100%; font-size: 32rpx; font-weight: 550; line-height: 32rpx; border-left: 10rpx solid #28b5b1; } } #myEcharts { width: 100%; height: 600rpx; } } } </style>
uni-app微信小程序使用echarts圖表
前言:本來(lái)是使用的ucharts,但因?yàn)闊o(wú)法監(jiān)聽(tīng)圖例點(diǎn)擊交互,滿足不了需求,所以只能放棄。
首先,下載echart組件??梢韵入S便建個(gè)文件夾,然后 npm init。接著下載依賴
npm install echarts mpvue-echarts
然后找到 node_modules\mpvue-echarts\下的文件,如圖
只留下src,其他的刪掉(沒(méi)有用到)。然后復(fù)制 mpvue-echarts文件夾到你項(xiàng)目的components中。如圖
接著需要echarts.min.js文件。
鏈接: ECharts 在線構(gòu)建定制echarts的js文件,選擇自己項(xiàng)目需要的圖表及組件,可以選擇進(jìn)行代碼壓縮。
把下載下來(lái)的 echarts.min.js放到你的項(xiàng)目中。?。。∵€需要修改里面的代碼,
!!!修改 echarts.min.js,否則會(huì)報(bào)錯(cuò) t.addEventListener is not a function。
1.增加代碼
var isDomLevel2 = (typeof window !== 'undefined') && !!window.addEventListener;
如下圖
2.修改 Le 和 Pe 函數(shù)(可通過(guò)ctrl+f搜索)如下
// An highlighted block function Pe(t, e, n, i) { if (isDomLevel2) { t.addEventListener(e, n, i) } else { t.attachEvent('on' + e, n) } } function Le(t, e, n, i) { if (isDomLevel2) { t.removeEventListener(e, n, i) } else { t.detachEvent('on' + e, n) } }
3.全文搜索 preventDefault() 修改當(dāng)前的方法函數(shù)增加判斷(我一開(kāi)始沒(méi)改這個(gè),圖表正常沒(méi)啥問(wèn)題,但是我用dataZoom滑動(dòng)時(shí)會(huì)報(bào)錯(cuò)“t.preventDefault is not a function”,然后改為如下代碼后就能正常滑動(dòng)了)
如下
// An highlighted block if (isDomLevel2) { t.preventDefault(), t.stopPropagation(), t.cancelBubble = !0 } else { t.returnValue = false; t.cancelBubble = !0 }
壓縮的代碼格式化后體積增加了1倍,所以我最后沒(méi)有格式化,直接在壓縮的代碼里找到對(duì)應(yīng)位置修改的。 需要準(zhǔn)備的東西都已經(jīng)好了,接下來(lái)正片開(kāi)始!! 在頁(yè)面中使用:
<template> <view class="echarts-wrap"> <my-echarts id="main" ref="mapChart" :echarts="echarts" :onInit="initChart" /> </view> </template> <script> import * as echarts from "@/pages/data/static/js/echarts.min.js"; //這里根據(jù)自己存放的路徑修改 import myEcharts from "@/pages/data/components/mpvue-echarts/src/echarts.vue"; //這里根據(jù)自己存放的路徑修改 let chart = null; //放外層方便拿到echart實(shí)例 export default { components: { myEcharts, }, data() { return { echarts, }; }, onReady() {}, mounted() { setTimeout(() => { chart.on("click", (params) => { //監(jiān)聽(tīng)圖例點(diǎn)擊事件(詳細(xì)參見(jiàn)echart文檔) this.$emit("chartClick", params); }); }, 500); this.updateData() //模擬動(dòng)態(tài)更新數(shù)據(jù) }, methods: { initChart(canvas, width, height) { chart = echarts.init(canvas, null, { width: width, height: height, }); canvas.setChart(chart); var option = { xAxis: { type: "category", data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], }, yAxis: { type: "value", }, series: [ { data: [120, 200, 150, 80, 70, 110, 130], type: "bar", }, ] }; // ECharts 配置項(xiàng)(詳細(xì)的圖表配置參見(jiàn) echart配置項(xiàng)) chart.setOption(option); return chart; // 返回 chart 后可以自動(dòng)綁定觸摸操作 }, updateData(){ setTimeout(()=>{ chart.setOption({ series:[{ data:[30, 90, 111, 20, 70, 88, 11] }] }) },1000) }, }, }; </script> <style> .echarts-wrap { width: 100%; height: 300px; } </style>
詳細(xì)的圖表配置參見(jiàn) echart配置項(xiàng) 最后效果:
到此這篇關(guān)于uni-app微信小程序使用echarts的文章就介紹到這了,更多相關(guān)小程序使用echarts內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS實(shí)現(xiàn)簡(jiǎn)單省市二級(jí)聯(lián)動(dòng)
這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)簡(jiǎn)單的省市二級(jí)聯(lián)動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11基于JavaScript短信驗(yàn)證碼如何實(shí)現(xiàn)
我們?cè)谑褂靡苿?dòng)、電信等運(yùn)營(yíng)商網(wǎng)上營(yíng)業(yè)廳的時(shí)候,為確保業(yè)務(wù)的完整和正確性,經(jīng)常會(huì)需要用到短信的驗(yàn)證碼。最近因?yàn)槟呈I(yè)務(wù)需要,也做了個(gè)類似的功能2016-01-01解決Layui數(shù)據(jù)表格中checkbox位置不居中的方法
今天小編就為大家分享一篇解決Layui數(shù)據(jù)表格中checkbox位置不居中的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08javascript電商網(wǎng)站搶購(gòu)倒計(jì)時(shí)效果實(shí)現(xiàn)
這篇文章主要介紹了javascript電商網(wǎng)站搶購(gòu)倒計(jì)時(shí)效果實(shí)現(xiàn)代碼,掌握日期對(duì)象Date,獲取時(shí)間的方法,感興趣的小伙伴們可以參考一下2015-11-11js實(shí)現(xiàn)千分符和保留幾位小數(shù)的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇js實(shí)現(xiàn)千分符和保留幾位小數(shù)的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08JS實(shí)現(xiàn)頁(yè)面數(shù)據(jù)懶加載
這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)頁(yè)面數(shù)據(jù)懶加載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02JavaScript中的立即執(zhí)行函數(shù)表達(dá)式介紹
這篇文章主要介紹了JavaScript中的立即執(zhí)行函數(shù)表達(dá)式介紹,本文著重講解了什么是立即調(diào)用函數(shù)表達(dá)式,需要的朋友可以參考下2015-03-03