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.mzph.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 "超音速"