使用的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左右大小

页面中的用法

第一次尝试,修改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即可

第二次尝试,修改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();

});

...

},

}

修改后的页面用法

好文链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。