微信小程序使用ECharts的示例详解

目录
  • 安装 ECharts 组件
  • 使用 ECharts 组件
  • 图表延迟加载

echarts-for-weixin 是 ECharts 官方维护的一个开源项目,提供了一个微信小程序组件(Component),我们可以通过这个组件在微信小程序中使用 ECharts 绘制图表。

echarts-for-weixin 自身包含很多使用示例,方便我们参考。

安装 ECharts 组件

克隆项目:

?

|---|----------------------------------------------------------------------|
| 1 | git clone https:``//github``.com``/ecomfe/echarts-for-weixin``.git |

切换版本:

?

|---|-----------------------|
| 1 | git checkout v2.0.0 |

echarts-for-weixin 最新的 Releases 版本为 v2.0.0 ,内部使用的 ECharts 版本为 5.1.1,详情可以参考 Releases。

项目文件夹 ec-canvas 就是我们需要的 ECharts 组件文件夹,我们只需要把该文件夹整个复制/拷贝到我们小程序项目中就可以完成安装。

ec-canvas 目录下有一个 echarts.js ,默认文件大小较大,如果我们需要使用从 官网自定义构建 的方式减小文件大小,选择的 ECharts 版本一定要和 echarts-for-weixin 版本相匹配,如:5.1.1。

使用 ECharts 组件

假设我们需要绘制图表的页面(Page)为 echarts,小程序项目中对应以下四个文件:

  • echarts.js
  • echarts.wxml
  • echarts.wxss
  • echarts.json

在文件 echarts.json 中引用声明组件:

复制代码
{
  "usingComponents": {
    "ec-canvas": "/activity/components/ec-canvas/ec-canvas"
  }
}

ec-canvas 为 ECharts 组件名称,/activity/components/ec-canvas/ec-canvas 是小程序项目中 ECharts 组件的安装目录。

在文件 echarts.wxml 中使用组件:

?

|-------|---------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 | <``view class``=``"ec-container"``> ``<``ec-canvas canvas-id``=``"echart-pie" ec``=``"{``{ec}}"``></``ec-canvas``> </``view``> |

canvas-id 是组件ID,必须唯一;ec 是组件对象,内部包含组件绘制所需要的数据。

ECharts 组件需要一个组件容器(view),多个组件可以位于同一个组件容器中,必须保证组件初始化(onInit)之前,组件容器是有宽度和高度的;否则,可能导致图表不能正常显示,只显示空白。

在文件 echarts.wxss 中声明布局样式类:

?

|----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | .ec-container { ``display``: flex; ``flex-``direction``: column; ``align-items: ``center``; ``justify-``content``: ``center``; ``width``: ``100``vw; ``height``: ``100``vh; } ec-canvas { ``width``: ``100%``; ``height``: ``100%``; } |

.ec-container 为组件容器使用的样式类,注意组件容器宽高(width)和高度(height)的声明;ec-canvas 为组件容器使用的样式类,可以使用宽高(width)和高度(height)设置图表宽高,也可以使用绝对定位(absolute/top/bottom/left/right)的方式设置图表位置和宽高。

在 echarts.js 中创建和绑定 ECharts 组件对象:

?

|---|-------------------------------------------------------------------|
| 1 | import * as echarts from ``'../../components/ec-canvas/echarts' |

导入 echarts;

?

|-------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | function initChart(canvas, width, height, dpr) { ``const chart = echarts.init(canvas, ``null``, { ``width: width, ``height: height, ``devicePixelRatio: dpr ``}); ``canvas.setChart(chart); ``var option = { ``backgroundColor: ``"#ffffff"``, ``series: [{ ``label: { ``normal: { ``fontSize: 14 ``} ``}, ``type: ``'pie'``, ``center: [``'50%'``, ``'50%'``], ``radius: [``'20%'``, ``'40%'``], ``data: [{ ``value: 55, ``name: ``'北京' ``}, { ``value: 20, ``name: ``'武汉' ``}, { ``value: 10, ``name: ``'杭州' ``}, { ``value: 20, ``name: ``'广州' ``}, { ``value: 38, ``name: ``'上海' ``}] ``}] ``}; ``chart.setOption(option); ``return chart; } |

ECharts 组件初始化 通用 函数,我们只需要修改函数中的 option 中的内容即可。

?

|---------------|----------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 | Page({ ``data: { ``ec: { ``onInit: initChart ``} ``} }) |

ECharts 组件初始化,加载图表:

图表延迟加载

如果不想页面渲染时就加载图表,就需要使用延迟加载,俗称"懒加载"。

?

|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 | <``view class``=``"ec-container"``> ``<``ec-canvas id``=``"lazy-echart-pie" canvas-id``=``"lazy-canvas-pie" ec``=``"{``{lazyEc}}"``></``ec-canvas``> </``view``> |

id 是 ECharts 组件的唯一标识,canvas-id 是 ECharts 组件内部画布(Canvas)的唯一标识。

?

|---------------|-------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 | Page({ ``data: { ``lazyEc: { ``lazyLoad: ``true ``} ``} }) |

页面渲染时,不直接初始化 ECharts 组件对象,且设置组件启用懒加载;

?

|---|---------------------------------------------------------------------------|
| 1 | this``.lazyComponent = ``this``.selectComponent(``'#lazy-echart-pie'``) |

页面渲染完成后,使用组件ID获取组件实例(lazyComponent),保存至页面(this)实例中。

?

|-------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | this``.lazyComponent.init((canvas, width, height, dpr) => { ``const chart = echarts.init(canvas, ``null``, { ``width: width, ``height: height, ``devicePixelRatio: dpr ``}); ``canvas.setChart(chart); ``this``.lazyChart = chart; ``var option = { ``... ``}; ``chart.setOption(option); ``return chart; }); |

需要加载图表时,使用组件实例,手动 调用初始化方法(init),方法内容与 initChart 相同。为了方便后续操作图表实例(chart),也可以将它保存至页面实例中。

?

|---|-------------------------------|
| 1 | this``.lazyChart.dispose(); |

不需要图表时,获取图表实例,销毁图表。

相关推荐
光影少年15 小时前
Taro 是如何解析入口配置 app.config.ts 和页面配置的?
微信小程序·小程序·typescript·reactjs·百度小程序·taro
用户7884773163417 小时前
门店核销闭环:小程序扫码 + .NET 幂等接口 + WPF 看板,一天能跑通
微信小程序·c#
paopaokaka_luck1 天前
高校社团管理(AI辅助任务分配、协同过滤算法推荐、ECharts数据可视化、活动参与闭环、校园交流与反馈、器材借还管理)
java·前端·javascript·spring boot·数据分析·echarts
愚公搬代码1 天前
【愚公系列】《微信小程序项目实战(AI编程+视频图解)》014-莫凡商城小程序项目视图容器组件的应用
微信小程序·小程序·ai编程
星光开发者2 天前
基于决策树随机森林算法的小说推荐系统的设计与实现-计算机毕设【课程设计】78485
vue.js·算法·微信小程序·django·php·课程设计·express
QQ_21696290962 天前
基于微信小程序的智能膳食分析系统
java·大数据·spring boot·微信小程序·小程序·旅游
QQ_21696290962 天前
基于C#(Asp.net)电竞陪玩信息管理系统的设计与实现
java·大数据·spring boot·微信小程序·c#·云计算·asp.net
paopaokaka_luck3 天前
非遗文物数字化小程序(AI非遗问答、ONNX图像识别、协同过滤推荐、ECharts数据分析、非遗知识浏览与互动、文创商城订单闭环、文化活动报名签到、社区交流)
javascript·spring boot·mysql·数据分析·echarts·mybatis
吠品3 天前
CSS图片模糊过渡:一个transition加filter就够
java·数据库·notepad++
m0_462803883 天前
名单制签到怎么落地:拆解“仅名单内人员签到“的配置链路与匹配逻辑
微信小程序