【uni-app】uni项目打包微信小程序中使用 ECharts (mpvue-echarts)

这篇具有很好参考价值的文章主要介绍了【uni-app】uni项目打包微信小程序中使用 ECharts (mpvue-echarts)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在小程序里画图表,uniapp 不想引入 u-charts怎么办,个人还是喜欢用echarts
先看成品图
uniapp mpvue-echarts,uni相关,echarts,微信小程序,javascript

说明:
示例下载-- 完整dom
如果你想要在单页面渲染多个图标可以看看:这里(相关文章传送门)

原生小程序使用的是echarts-for-weixin,具体地址如下:
https://github.com/ecomfe/echarts-for-weixin

想在uni项目开发的小程序中使用Echarts太艰辛了,我选择使用mpvue-echarts,踩了一路坑!!!

网上写这个的还不少,常见的两种方法:

  • .执行命令(npm install echarts mpvue-echarts),把 node_modules 下生成mpvue-echarts的src文件放到components下,成为自己的组件 (类似文章传送门)
  • .mpvue-echarts的官方介绍:https://github.com/F-loat/mpvue-echarts

很巧,我是一个也没用上,各种报错

  • 编译错误:Module build failed (from ./node_modules/@dcloudio/webpack-uni-mp-loader/lib/script.js)
  • this.echarts.setCanvasCreator is not a function的错误
  • e.addEventListener is not a function 报错
  • 文件体积超过 500KB,已跳过压缩以及 ES6 转 ES5 的处理,手机端使用过大的js库影响性能

很多教程都说的不是很明白,下面直接上我改进后的步骤:

1、npm install & 定制echarts

  • 在package.js里的写echarts的版本号后执行该命令
"dependencies": {
    "echarts": "^5.0.0",
  },
  • 或者在线定制echarts.simple.min文件

注意版本号
uniapp mpvue-echarts,uni相关,echarts,微信小程序,javascript

2. 下载组件

下载 mpvue-echarts文件夹,放到主包的components或者分包下的components都可以

值得注意的是,如果你遇到this.echarts.setCanvasCreator is not a function的错误
检查一下需要修改引入方法路径是否正确:下图是通过npm的路径,如果是在线定制的话写你的文件相对路径
uniapp mpvue-echarts,uni相关,echarts,微信小程序,javascript
注:已gitee代码为准

  1. 在vue文件中使用
<template>
  <view class="container">
    <view class="wrap">
      <mpvue-echarts :echarts="echarts" :onInit="onInit" canvasId="gauge" />
    </view>
    <view class="card-result">
      <view class="card-result-h">结果评估 <span>(满分为100分)</span></view>
      <view class="card-result-r">
        <view
          ><span class="car-title">测验表名</span
          ><span class="car-content" style="margin-right: -0.55rem">{{
            type_name
          }}</span></view
        >
        <view
          ><span class="car-title">测验分数</span
          ><span class="car-content">{{ score }}</span></view
        >
        <view
          ><span class="car-title">测验结果</span
          ><span class="car-content">{{ judge }}</span></view
        >
      </view>
    </view>
  </view>
</template>

<script>
import * as echarts from "../../components/mpvue-echarts/src/echarts.min.js";  // 写自己的路径
import mpvueEcharts from "../../components/mpvue-echarts";

let chart = null;
let EScore = null;

function initChart(canvas, width, height) {
  chart = echarts.init(canvas, null, {
    width: width,
    height: height,
  });
  canvas.setChart(chart);

  var option = {
        series: [
          {
            type: 'gauge',
            center: ['50%', '65%'],
            radius: '115%',
            axisLine: {
              lineStyle: {
                width: 30,
                color: [
                  [0.25, (function() {
                    return new echarts.graphic.LinearGradient(0, 0, 1, 0, [{
                      offset: 0,
                      color: '#52B5FF'
                    }, {
                      offset: 0.5,
                      color: '#4EA4FF'
                    }, {
                      offset: 1,
                      color: '#498CFF'
                    }])
                  })()], [0.5, (function() {
                    return new echarts.graphic.LinearGradient(0, 0, 1, 0, [{
                      offset: 0,
                      color: '#2BEFD1'
                    }, {
                      offset: 0.5,
                      color: '#16E1C9'
                    }, {
                      offset: 1,
                      color: '#04D5C2'
                    }])
                  })()],
                  [0.75, (function() {
                    return new echarts.graphic.LinearGradient(0, 0, 1, 0, [{
                      offset: 0,
                      color: '#FDD75C'
                    }, {
                      offset: 0.5,
                      color: '#FDC249'
                    }, {
                      offset: 1,
                      color: '#FE9A27'
                    }])
                  })()],
                  [1, (function() {
                    return new echarts.graphic.LinearGradient(0, 0, 1, 0, [{
                      offset: 0,
                      color: '#A4FBEC'
                    }, {
                      offset: 0.5,
                      color: '#73DEF5'
                    }, {
                      offset: 1,
                      color: '#3FBFFE'
                    }])
                  })()]
                ]
              }
            },
            pointer: {
              itemStyle: {
                color: 'auto'
              }
            },
            axisTick: {
              distance: -30,
              length: 8,
              show: false,
              lineStyle: {
                color: '#fff',
                width: 2
              }
            },
            splitLine: {
              show: false,
              distance: -30,
              length: 30,
              lineStyle: {
                color: '#fff',
                width: 4
              }
            },
            axisLabel: {
              color: '#999',
              distance: 40,
              fontSize: 20
            },
            title: {
              show: true,
              color: '#444B5F',
              fontSize: 25
            },
            startAngle: 180,
            endAngle: 0,
            splitNumber: 4,
            detail: {
              valueAnimation: true,
              formatter: '{value}',
              color: '#333333',
              fontSize: 35
            },
            data: [
              {
                value: EScore,
                name: '最终评分结果'
              }
            ]
          }
        ]

      }
  chart.setOption(option);
  return chart;
}

export default {
  data() {
    return {
      echarts,
      onInit: initChart,
      size: "medium",
      score: "",
      judge: "",
      type_name: "",
    };
  },

  components: {
    mpvueEcharts,
  },
  onLoad(options) {
    // this.score = options.score,
    // this.judge = options.judge
    // this.type_name = options.type_name
    // EScore = Number(options.score)
	// 虚拟数据--如果你有请求的话可以放开上面的内容
	this.score = 54,
    this.judge = 45
    this.type_name = 'name'
    EScore = 54
  },
  methods: {
  },
};
</script>

<style lang="scss" scoped>
.container {
  background: #ffff;
  min-height: 100vh;
}
.wrap {
  width: 100%;
  height: 250px;
}
.card-result {
  margin: 0 10px;
  padding: 15px;
  background: #f2fbfd;
  border-radius: 1rem;
  text-align: left;
  font-size: 20px;
  &-h {
    span {
      font-weight: 400;
      color: #00aac6;
    }
    font-weight: 600;
  }
  &-r {
    display: flex;
    flex-direction: column;
    view {
      margin-top: 15px;
      display: flex;
      justify-content: space-between;
      align-items: flex-end;
    }
    .car-title {
      font-size: 17px;
      &::before {
        content: "";
        border-left: 0.1rem solid #00aac6;
        border-radius: 1rem;
        margin-right: 5px;
        border-left-width: 5px;
      }
    }
    .car-content {
      font-size: 14px;
      color: #00aac6;
    }
  }
}
</style>

到这里就可以正常展示了
uniapp mpvue-echarts,uni相关,echarts,微信小程序,javascript

放在最后

改进的地方主要是拿到组件mpvue-echarts无法接收到prop的echarts,所以改用install后的echarts,当然你也可以去在线定制echarts.simple.min文件,我目前只定制了仪表盘
uniapp mpvue-echarts,uni相关,echarts,微信小程序,javascript
2023/9/14

补充–问题集锦

[重要] 不要把 chart 实例赋值到 this(vue 实例) 上

如何获取图表实例?

echarts.init 返回的即为图表实例。

打包结果超过小程序大小限制?

使用自定义版 echarts,官网定制

如何延迟加载图表?

参见 examples/lazyLoad 的例子,可以在获取数据后再初始化数据。

如何在一个页面中加载多个图表?

参见 examples/multiCharts 的例子。

图表变空白?

尝试设置 throttleTouch 属性为 true。

如何使用 Tooltip?

目前,本项目已支持 ECharts Tooltip,但是由于 ECharts 相关功能尚未发版,因此当前需要使用原项目中 ec-canvas/echarts.js,这个文件包含了可以在微信中使用 Tooltip 的相关代码。目前在 ECharts 官网下载的 echarts.js 还不能直接替换使用,等 ECharts 正式发版后即可。

具体使用方法和 ECharts 相同,例子参见 pages/line/index.js。

文件太大怎么办?

本项目默认提供的 ECharts 文件是最新版本的包含所有组件文件,为了便于开发,提供的是未压缩的版本。远程调试或预览可以下载 echarts.min.js 压缩版本。

发布时,如果对文件大小要求更高,可以在 ECharts 在线定制网页下载仅包含必要组件的包,并且选择压缩。

打包时出错 ERROR in static/js/vendor.js from UglifyJs
参照以下配置使 babel 处理 mpvue-echarts

// webpack.base.conf.js
{
  test: /\.js$/,
  include: [
    resolve('src'),
    resolve('node_modules/mpvue-echarts')
  ],
  use: [
    'babel-loader',
    {
      loader: 'mpvue-loader',
      options: {
        checkMPEntry: true
      }
    }
  ]
}

微信版本要求

支持微信版本 >= 6.6.3,对应基础库版本 >= 1.9.91。尽可能使用更高版本的基础库版本。

调试的时候,需要在微信开发者工具中,将“详情”下的“调试基础库”设为 1.9.91 及以上版本。

发布前,需要在 https://mp.weixin.qq.com 的“设置”页面,将“基础库最低版本设置”设为 1.9.91。当用户微信版本过低的时候,会提示用户更新。

暂不支持的功能

ECharts 中的绝大部分功能都支持小程序版本,因此这里仅说明不支持的功能,以及存在的问题。

以下功能尚不支持,如果有相关需求请在 issue 中向我们反馈,对于反馈人数多的需求将优先支持:

图片

多个 zlevel 分层
此外,目前还有一些 bug 尚未修复,部分需要小程序团队配合上线支持,但不影响基本的使用。已知的 bug 包括:

安卓平台:transform 的问题(会影响关系图边两端的标记位置、旭日图文字位置等)
iOS 平台:半透明略有变深的问题
iOS 平台:渐变色出现在定义区域之外的地方

.完结~欢迎留言文章来源地址https://www.toymoban.com/news/detail-729821.html

到了这里,关于【uni-app】uni项目打包微信小程序中使用 ECharts (mpvue-echarts)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何将各种小程序(微信小程序)项目转换为 uni-app 项目

    使用【miniprogram-to-uniapp】可以将微信小程序项目转为 uni-app 项目(新版本 HBuilderX 工具已经支持各种小程序转换插件) HBuilderX 插件地址:miniprogram-to-uniapp v2 - DCloud 插件市场 核心原理:使用 Babel 获取AST(词法分析),然后或使用 Babel 自带函数增删,或正则分析替换等等操作 支持的

    2024年02月04日
    浏览(66)
  • 详解uni-app项目运行在微信小程序调试

    uni-app项目运行在微信小程序调试 UNI-APP学习系列之详解uni-app项目运行在微信小程序调试 微信小程序工具,【下载地址】 打开下载地址后,选择电脑所用操作系统的稳定版本进行下载并安装。 项目运行在微信小程序 打开HbuilderX,运行 == 运行到小程序或模拟器 == 运行设置 =

    2024年02月15日
    浏览(94)
  • Webstorm 入门级玩转uni-app 项目-微信小程序+移动端项目方案

    1. Webstorm uni-app语法插件 : Uniapp Support Uniapp Support - IntelliJ IDEs Plugin | Marketplace 第一个是不收费,第二个收费 我选择了第二个 Uniapp Support ,有试用30天,安装重启webstorm之后,可以提高生产率。 补充 有小伙伴说搜索不到插件,目前webstorm 2022.3版本还能搜到2个: # Uniapp Tool  

    2024年02月11日
    浏览(107)
  • uni-app微信小程序使用echarts

    前言:本来是使用的ucharts,但因为无法监听图例点击交互,满足不了需求,所以只能放弃。 首先,下载echart组件。可以先随便建个文件夹,然后 npm init。接着下载依赖 然后找到 node_modulesmpvue-echarts下的文件,如图 只留下src,其他的删掉(没有用到)。然后复制 mpvue-echart

    2024年02月10日
    浏览(74)
  • 【微信小程序】-- uni-app 项目-- 购物车 -- 首页 - 轮播图效果(五十二)

    💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘   大家好,又见面了,

    2023年04月18日
    浏览(77)
  • 创建一个uni-app项目并运行再浏览器及微信小程序

    第一步: 打开HBuilder X 点击文件列表 新建 项目 第二步: 如图所示(根据项目所需要的进行选择) 第三步: 创建完成之后项目文件的(介绍以及作用) 第四步: 如何将uni-app项目运行到不同的浏览器,我在这里运行的是微信小程序 (1) 点击运行可以查看到项目的多种运行方式 (2

    2024年02月12日
    浏览(74)
  • THREEJS 在 uni-app 中使用(微信小程序)

    threejs 主要是用来开发web端的3D世界,源生包无法适配 微信小程序(会报 document.createElementNS 的错),需要使用 github 上经过大佬改写的 threejs 包。 将源码下载到本地后,找到 将 以上三个文件 复制到自己的 uni-app 项目中 (任意路径下,这里我放在了自己的 utils 下,好像一般

    2024年02月07日
    浏览(58)
  • 微信小程序给图片加水印【使用uni-app】

    选择图片后使用canvas绘制图片,再绘制需要的水印文字,将绘制好的画布转化为图片即可 最终效果

    2024年02月10日
    浏览(64)
  • uni-app:vue3 + uni-app 在微信小程序中无法使用app.component全局注册组件

    按上文中的代码执行后,会发现在微信小程序开发中全局注册的组件是无法显示的,这是uniapp的一个未解决bug, 在uniapp中出了可以通过vue实例的component方法注册全局组件外,uniapp支持另一种全局注册的方式,就是通过 easycom 扫描注册,步骤如下 easycom 的扫描流程是:通过代码

    2024年02月16日
    浏览(98)
  • uni-app 微信小程序 使用mixins设置分享 onShareAppMessage

    参考链接:https://www.jianshu.com/p/844018ca174f 这样设置后,右上角三个点的分享就可以分享了

    2024年02月12日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包