uni-app中使用Echarts uni-app如何引入和使用图表

千浩大大_9958

千浩大大_9958

2026-03-21

412人浏览

原创

uni-app中直接使用echarts会因缺少window/document报错,应按平台选择方案:微信小程序用echarts-for-weixin,app/h5用原生echarts(h5需onready后初始化),多端推荐ucharts替代以避免兼容问题。

uni-app中使用echarts uni-app如何引入和使用图表

uni-app 里直接用 echarts 会报错:找不到 window 或 document

这是因为 echarts 默认依赖浏览器全局对象,在 uni-app 的非 H5 端(如小程序、App)运行时,window 和 document 不可用。直接 npm install echarts 后 import * as echarts from 'echarts',在微信小程序或 App 端会立刻抛出 ReferenceError: window is not defined。

解决思路不是“换库”,而是用官方适配版:echarts-for-weixin(仅限微信小程序)或更通用的 echarts + uni-app 兼容层方案。但最稳的方式是:只在 H5 端用原生 echarts,其他端改用 echarts-canvas 渲染器 + 小程序自绘 canvas。

  • 微信小程序:必须用 echarts-for-weixin 提供的 ec-canvas 组件,且需手动初始化 canvas 实例
  • App 和 H5:可直接用 echarts,但 H5 需确保 DOM 已挂载(onReady 后初始化)
  • 支付宝/百度等小程序:不支持 echarts-for-weixin,得用 echarts 的 canvas 渲染器 + 自封装渲染逻辑(较麻烦)

微信小程序中引入 echarts-for-weixin 的三步实操

这不是简单 npm install 就完事——它本质是个「组件 + 初始化脚本」组合包,漏一步就白搭。

  • 执行 npm install echarts-for-weixin --save(注意不是 echarts)
  • 把 node_modules/echarts-for-weixin/ec-canvas 整个文件夹复制到项目 components/ec-canvas/ 下(uni-app 不支持 node_modules 中的自定义组件路径)
  • 在页面中声明组件并绑定 canvas:
    <template><view class="container"><ec-canvas id="mychart-dom" :ec="ec"></ec-canvas></view></template><script>
    import EcCanvas from '@/components/ec-canvas/ec-canvas'
    export default {
      components: { EcCanvas },
      data() {
        return { ec: null }
      },
      onReady() {
        this.initChart()
      },
      methods: {
        initChart() {
          this.ec = {
            onInit: canvas => {
              const chart = echarts.init(canvas, null, { renderer: 'canvas' })
              canvas.setChart(chart)
              chart.setOption({ /* 你的配置 */ })
              return chart
            }
          }
        }
      }
    }</script>

echarts 配置项在 uni-app 中的兼容性陷阱

很多选项看着能用,实际在小程序里会静默失效,比如 tooltip.trigger 设为 'axis' 在小程序 canvas 上不响应 hover;又比如 dataZoom 滚动条在 App 端根本不可拖拽。

  • animation 默认开启,但在低端安卓机上易卡顿,建议设为 false 或用 animationDuration: 0
  • color 数组如果含 CSS 变量(如 var(--primary)),小程序不识别,得写死十六进制色值
  • 使用 graphic 渲染自定义图形时,image 类型只支持本地路径(/static/logo.png),不支持网络地址或 base64
  • 异步加载数据后调用 chart.setOption(option, { notMerge: true }) 是安全的;但直接改 option.series[0].data 再 setOption(option) 容易丢掉动画状态

跨平台统一图表方案:为什么推荐封装一个 UCharts 代替原生 echarts

如果你的项目要同时跑 H5、微信小程序、App 甚至快应用,硬啃 echarts 多端适配成本远高于预期——每个平台都要写分支逻辑、补 canvas 初始化、绕开 DOM 依赖、处理 touch 事件映射……最后代码里全是 if (uni.getSystemInfoSync().platform === 'mp-weixin')。

更轻量的解法是换用专为 uni-app 设计的 ucharts(注意拼写是 u-charts,不是 echarts):

  • 它本身基于 canvas,无 DOM 依赖,天然支持所有 uni-app 平台
  • API 更精简,initChart() 传入 canvas ID 和配置即可,不用管 onInit 回调和实例缓存
  • 自带主题、导出图片(canvasToTempFilePath)、手势缩放(scrollEnable)等 uni-app 常用能力
  • 唯一代价:功能比 echarts 少(比如没有地理坐标系、3D 图、复杂 markArea),但 90% 的柱状图、折线图、饼图完全够用

真正难的不是“怎么让图表显示出来”,而是“怎么让同一份配置在五个平台都稳定响应交互、不闪、不白屏、不报错”。这点上,妥协用 ucharts 往往比硬刚 echarts 更省时间。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2443

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5283

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6330

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

5918

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

843

5

C语言变量命名
C语言变量命名

c语言变量名规则是:1、变量名以英文字母开头;2、变量名中的字母是区分大小写的;3、变量名不能是关键字;4、变量名中不能包含空格、标点符号和类型说明符。php中文网还提供c语言变量的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

3129

3

c语言入门自学零基础
c语言入门自学零基础

C语言是当代人学习及生活中的必备基础知识,应用十分广泛,本专题为大家c语言入门自学零基础的相关文章,以及相关课程,感兴趣的朋友千万不要错过了。

2023.07.25

2288

9

c语言运算符的优先级顺序
c语言运算符的优先级顺序

c语言运算符的优先级顺序是括号运算符 > 一元运算符 > 算术运算符 > 移位运算符 > 关系运算符 > 位运算符 > 逻辑运算符 > 赋值运算符 > 逗号运算符。本专题为大家提供c语言运算符相关的各种文章、以及下载和课程。

2023.08.02

1240

5

c语言数据结构
c语言数据结构

数据结构是指将数据按照一定的方式组织和存储的方法。它是计算机科学中的重要概念,用来描述和解决实际问题中的数据组织和处理问题。数据结构可以分为线性结构和非线性结构。线性结构包括数组、链表、堆栈和队列等,而非线性结构包括树和图等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.09

1178

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.7万人学习