uniapp引入插件市場echarts圖表(l-echart)實現小程序端圖表,并修改源碼簡化使用

使用的uniapp插件:l-echart

https://ext.dcloud.net.cn/plugin?id=4899

注意事項

1.因為小程序有主包分包大小限制,并且uni_modules中的包也會算在主包體積中,而我項目中的圖表是在分包中使用的,所以我移動uni_modules中的l-echart圖表組件到分包目錄組件文件夾中
2.精簡echarts.min.js體積,因為需求中只需要柱圖和餅圖,所以我去https://echarts.apache.org/zh/builder.html下載指定的 echarts 組件壓縮包,然后替換l-echart中的echarts.min.js文件,只需要500kb左右大小

頁面中的用法

<template><view class="charts-box"><l-echart ref="chart" ="init" class="charts-box"></l-echart></view>
</template><script>
import LEchart from "@/package-pc/pages/components/lime-echart/components/l-echart/l-echart.vue";
import * as echarts from "@/package-pc/pages/components/lime-echart/static/echarts.min.js";
import option from "@/package-pc/pages/monthreport/option";
export default {components: {LEchart,},data() {return {option: option,};},// 使用組件的finished事件里調用methods: {async init() {const chart = await this.$refs.chart.init(echarts);chart.setOption(this.option);},},
};
</script><style scoped>
/* 請根據實際需求修改父元素尺寸,組件自動識別寬高 */
.charts-box {width: 100%;height: 600px;
}
</style>

第一次嘗試,修改l-echart源碼,簡化組件用法(不推薦用法):

這樣寫有一個重大問題,uniapp不支持props傳遞的對象里面屬性有function,而echarts這樣的屬性很多,所以不推薦這樣修改源碼,這里只是記錄一下我嘗試封裝的思路過程

1.組件中直接引入echarts.min.js
2.props增加option傳參
3.watch中監聽option傳參
4.mounted中直接執行init方法初始化圖表
5.init方法中調用setOption方法
6.加入uni.onWindowResize方法監聽寬高變化,然后調用原本就實現的resize方法

import * as echarts from "@/package-pc/pages/components/lime-echart/static/echarts.min.js";
export default {name: "lime-echart",props: {...option: {type: Object,},},watch: {option: {handler() {this.setOption(this.option);},deep: true,},},mounted() {this.$nextTick(() => {this.$emit("finished");this.init();});},methods:{...async init(...args) {// #ifndef APP-NVUE// if (arguments && arguments.length < 1) {//   console.error(//     "缺少參數:init(echarts, theme?:string, opts?: object, callback?: function)"//   );//   return;// }// #endif...this.chart = echarts.init(config.canvas,theme,Object.assign({}, config, opts));this.chart.setOption(this.option ?? {});uni.onWindowResize(() => {this.resize();});...},}
修改后的頁面用法

直接傳參option給組件,請求接口后修改option即可

<template><view class="charts-box"><l-echart :option="option1" class="charts-box"></l-echart></view>
</template><script>
import LEchart from "@/package-pc/pages/components/lime-echart/components/l-echart/l-echart.vue";
import option from "@/package-pc/pages/monthreport/option";
export default {components: {LEchart,},data() {return {option: option,};},// 修改option即可methods: {async setText() {this.option.title.text = "test"},},
};
</script><style scoped>
/* 請根據實際需求修改父元素尺寸,組件自動識別寬高 */
.charts-box {width: 100%;height: 600px;
}
</style>

第二次嘗試,修改l-echart源碼,簡化組件用法(推薦用法):

做的工作其實就是把echarts放在組件里面使用了,頁面中就不用導入了,同時組件內部做了init初始化圖表,頁面中setOption就行了

import * as echarts from "@/package-pc/pages/components/lime-echart/static/echarts.min.js";
export default {name: "lime-echart",mounted() {this.$nextTick(async () => {await this.init();this.$emit("finished");});},methods:{...async init(...args) {// #ifndef APP-NVUE// if (arguments && arguments.length < 1) {//   console.error(//     "缺少參數:init(echarts, theme?:string, opts?: object, callback?: function)"//   );//   return;// }// #endif...this.chart = echarts.init(config.canvas,theme,Object.assign({}, config, opts));uni.onWindowResize(() => {this.resize();});...},}
修改后的頁面用法
<template><view class="charts-box"><l-echartref="chart":option="option"="init"class="charts-box"></l-echart></view>
</template><script>
import LEchart from "@/package-pc/pages/components/lime-echart/components/l-echart/l-echart.vue";
import option from "@/package-pc/pages/monthreport/option";
export default {components: {LEchart,},data() {return {option: option,};},// finished回調中設置option,接口請求圖表數據也放在這里methods: {init() {this.$refs.chart.setOption(this.option);},},
};
</script><style scoped>
/* 請根據實際需求修改父元素尺寸,組件自動識別寬高 */
.charts-box {width: 100%;height: 600px;
}
</style>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209454.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209454.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209454.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python 的list是...

對 Python list遺憾 sum 對列表執行正確的操作幾乎是不可能的。 my_list list(range(1, 100001))能夠執行 sum()、min() 和 max() 的情況非常罕見。 sum(my_list)5000050000比如mean(), std() &#xff0c;這些也不行。 mean(my_list)----------------------------------…

高通CRM的v4l2驅動模型

概述下crm中v4l2框架的初始化創建流程&#xff1a; 對于CRM主設備的v4l2框架創建過程&#xff1a; 1、分配和初始化v4l2 device對象 2、分配和初始化media device對象&#xff0c;然后將v4l2 device中mdev綁定到media device上 3、分配和初始化video device對象&#xff0c…

Python:核心知識點整理大全9-筆記

目錄 ?編輯 5.2.4 比較數字 5.2.5 檢查多個條件 1. 使用and檢查多個條件 2. 使用or檢查多個條件 5.2.6 檢查特定值是否包含在列表中 5.2.7 檢查特定值是否不包含在列表中 banned_users.py 5.2.8 布爾表達式 5.3 if 語句 5.3.1 簡單的 if 語句 5.3.2 if-else 語句 …

Java中sleep() 和 wait() 有什么區別?

Java中sleep() 和 wait() 有什么區別&#xff1f; sleep() 和 wait() 是兩個在 Java 中用于線程控制的方法&#xff0c;它們有一些重要的區別&#xff1a; 關聯對象&#xff1a; sleep() 是 Thread 類的靜態方法&#xff0c;它讓當前線程休眠指定的時間&#xff0c;不釋放對象…

YOLOv8改進 | 2023 | RCS-OSA替換C2f實現暴力漲點(減少通道的空間對象注意力機制)

一、本文介紹 本文給大家帶來的改進機制是RCS-YOLO提出的RCS-OSA模塊&#xff0c;其全稱是"Reduced Channel Spatial Object Attention"&#xff0c;意即"減少通道的空間對象注意力"。這個模塊的主要功能是通過減少特征圖的通道數量&#xff0c;同時關注空…

Android Studio APK打包指定包名

在最近寫的一個案列中嘗試用最新版的Android studio對項目進行打包測試&#xff0c;想要指定打包的包名這樣便于區分的時候發現以前的許多方法都過時了&#xff0c;查了很多資料才弄明白each被拋棄了。本教程建議先看第三步。 目錄 一、配置根目錄下gradle.build 二、通過bui…

Billu_b0x

信息收集 #正常進行信息收集就好Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-18 22:07 CST Nmap scan report for 192.168.182.142 (192.168.182.142) Host is up (0.00073s latency).PORT STATE SERVICE 22/tcp open ssh 80/tcp open http | http-cookie-flags:…

VSC改造MD編輯器及圖床方案分享

VSC改造MD編輯器及圖床方案分享 用了那么多md編輯器&#xff0c;到頭來還是覺得VSC最好用。這次就來分享一下我的blog文件編輯流吧。 這篇文章包括&#xff1a;VSC下md功能擴展插件推薦、圖床方案、blog文章管理方案 VSC插件 Markdown All in One Markdown Image - 粘粘圖片…

【電子通識】為什么電阻都是2.2、3.3、4.7、5.1這樣的小數,而不是整數?

剛開始接觸電路設計可能會對市面上已經有的電阻值如&#xff1a;2.2Ω、4.7Ω、5.1Ω、22Ω、47Ω、51Ω&#xff0c;通常都不是整數覺得非常困惑&#xff0c;所以查閱了一些資料&#xff0c;總結如下&#xff1a; 電阻是使用指數分布來設計生產的&#xff0c;即遵循國際電工委…

【CSP】202303-2_墾田計劃Python實現

文章目錄 [toc]試題編號試題名稱時間限制內存限制問題描述輸入格式輸出格式樣例輸入1樣例輸出1樣例解釋樣例輸入2樣例輸出2樣例解釋子任務Python實現 試題編號 202303-2 試題名稱 墾田計劃 時間限制 1.0s 內存限制 512.0MB 問題描述 頓頓總共選中了 n n n塊區域準備開墾田地&a…

基于STM32 + DMA介紹,應用和步驟詳解(ADC多通道)

前言 本篇博客主要學習了解DMA的工作原理和部分寄存器解析&#xff0c;針對ADC多通道來對代碼部分&#xff0c;應用部分作詳細講解&#xff0c;掌握代碼編程原理。本篇博客大部分是自己收集和整理&#xff0c;如有侵權請聯系我刪除。 本次博客開發板使用的是正點原子精英版&am…

23種策略模式之策略模式

文章目錄 前言優缺點使用場景角色定義UML模擬示例小結 前言 在軟件開發中&#xff0c;設計模式是為了解決常見問題而提供的一套可重用的解決方案。策略模式&#xff08;Strategy Pattern&#xff09;是其中一種常見的設計模式&#xff0c;它屬于行為型模式。該模式的核心思想是…

Java程序設計實驗6 | 集合類

*本文是博主對Java各種實驗的再整理與詳解&#xff0c;除了代碼部分和解析部分&#xff0c;一些題目還增加了拓展部分&#xff08;?&#xff09;。拓展部分不是實驗報告中原有的內容&#xff0c;而是博主本人自己的補充&#xff0c;以方便大家額外學習、參考。 &#xff08;解…

基于ssm的大型商場會員管理系統論文

摘 要 進入信息時代以來&#xff0c;很多數據都需要配套軟件協助處理&#xff0c;這樣可以解決傳統方式帶來的管理困擾。比如耗時長&#xff0c;成本高&#xff0c;維護數據困難&#xff0c;數據易丟失等缺點。本次使用數據庫工具MySQL和編程框架SSM開發的大型商場會員管理系統…

【漏洞復現】FLIR AX8紅外線熱成像儀命令執行漏洞

漏洞描述 eledyne FLIR 設計、開發、制造以及強大的傳感和意識技術。自透射熱圖像、可見光圖像、可見頻率分析、來自測量和診斷的先進威脅測量系統以及日常生活的創新解決方案。 Teledyne FLIR 提供多種產品用于政府、國防、工業和商業市場。我們的產品,緊急救援人員,軍事人…

插入排序與希爾排序(C語言實現)

1.插入排序 由上面的動圖可以知道插入排序的邏輯就是從第一個元素開始往后遍歷&#xff0c;如果找到比前一個元素小的&#xff08;或者大的&#xff09;就往前排&#xff0c;所以插入排序的每一次遍歷都會保證前面的數據是有序的&#xff0c;接下類用代碼進行講解。 我們這里傳…

bash中通過變量中的內容獲取對應的關聯數組

bash中通過變量中的內容獲取對應的關聯數組 Bash declare 手冊&#xff1a; https://phoenixnap.com/kb/bash-declare 實際問題&#xff1a; 在 bash 中創建了多個關聯數組&#xff0c;需要根據輸入的值&#xff0c;獲取不同的關聯數組。 可以使用 if 進行多次判斷&#xff…

智能優化算法應用:基于浣熊算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用&#xff1a;基于浣熊算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用&#xff1a;基于浣熊算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.浣熊算法4.實驗參數設定5.算法結果6.參考文獻7.MATLAB…

解決HTTP錯誤500.19 - internal server error -內部服務器錯誤的終極指南

在開發和維護網絡應用程序時&#xff0c;難免會遇到各種HTTP錯誤代碼。其中&#xff0c;HTTP錯誤500.19 - 內部服務器錯誤可謂是最令人頭痛的問題之一。當你的應用程序遇到這個錯誤時&#xff0c;它似乎就像一道墻壁&#xff0c;擋住了你前進的道路。但別擔心&#xff0c;本篇技…

Git全局設置命令---設置提交人姓名

介紹 使用git命令設置提交人姓名 命令 git config --global user.name "超音速"