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左右大小
页面中的用法
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); }, }, }; /* 请根据实际需求修改父元素尺寸,组件自动识别宽高 */ .charts-box { width: 100%; height: 600px; }
第一次尝试,修改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 { this.resize(); }); ... }, }
修改后的页面用法
直接传参option给组件,请求接口后修改option即可
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" }, }, }; /* 请根据实际需求修改父元素尺寸,组件自动识别宽高 */ .charts-box { width: 100%; height: 600px; }
第二次尝试,修改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 { this.resize(); }); ... }, }
修改后的页面用法
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); }, }, }; /* 请根据实际需求修改父元素尺寸,组件自动识别宽高 */ .charts-box { width: 100%; height: 600px; }
(图片来源网络,侵删)
(图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。