此文章适用于微信小程序中,在uniapp做的小程序中使用echarts

插件地址:echarts-for-wx - DCloud 插件市场

 

android开发uniapp插件详细教程 uniapp插件使用_uni-app

 插件网页往下翻有详细的使用步骤,这里简短的贴上几张图片

android开发uniapp插件详细教程 uniapp插件使用_自定义_02

 

android开发uniapp插件详细教程 uniapp插件使用_自定义_03

 以下是我 项目中的使用情况,分享给大家:

1.一键导入完插件后,项目根目录的文件夹js_sdk,将其中的uni-ec-canvas文件夹赋值到项目根目录的components中

android开发uniapp插件详细教程 uniapp插件使用_分隔线_04

android开发uniapp插件详细教程 uniapp插件使用_分隔线_05

 

 2.自定义一个组件

<template>
	<view>
		<uni-ec-canvas class="uni-ec-canvas" id="uni-ec-canvas" ref="canvas" canvas-id="mychart-gauge" :ec="ec">
		</uni-ec-canvas>
	</view>
</template>

<script>
	import uniEcCanvas from '@/components/uni-ec-canvas/uni-ec-canvas.vue'
	import * as echarts from '@/components/uni-ec-canvas/echarts'
	let chart = null
	export default {
		components: {
			uniEcCanvas
		},
		props: {
			valueData: {
				type: Number,
				// 定义是否必须传
				required: true,
				// 定义默认值
				default: 0
			}
		},
		mounted() {
			this.$refs.canvas.init(this.initChart)
		},
		data() {
			return {
				ec: {
					//是否懒加载, 将 lazyLoad 设为 true 后,需要手动初始化图表
					lazyLoad: true
				},
			}
		},

		methods: {
			initChart(canvas, width, height, canvasDpr) {
				chart = echarts.init(canvas, null, {
					width: width,
					height: height,
					devicePixelRatio: canvasDpr
				})
				canvas.setChart(chart)

				let option = {
					series: [{
							type: 'gauge',
							center: ['50%', '60%'],
							startAngle: 225,
							endAngle: -45,
							min: 0,
							max: 60,
							splitNumber: 10, //分割的刻度个数
							itemStyle: {
								color: '#4CD289'
							},
							progress: {
								//展示当前进度。
								show: true,
								width: 30,
								roundCap: true //两端是否显示圆形
							},
							pointer: {
								//仪表盘指针
								show: false
							},
							axisLine: {
								//仪表盘轴线相关配置
								// show:false,
								roundCap: true, //两端是否显示圆形
								lineStyle: {
									width: 30
								}
							},
							axisTick: {
								//刻度样式。
								show: false,
								distance: 12, //刻度线与轴线的距离。
								splitNumber: 5, //分隔线之间分割的刻度数
								length: 6, //刻度线长
								lineStyle: {
									width: 2,
									color: '#999'
								}
							},
							splitLine: {
								//分隔线样式。
								show: true,
								distance: 12, //分隔线与轴线的距离。
								length: 6, //分隔线线长
								lineStyle: {
									type: 'dotted',
									width: 3,
									color: '#999'
								}
							},
							axisLabel: {
								//刻度标签。
								show: false,
								distance: -20, //标签与刻度线的距离。
								color: '#999',
								fontSize: 20
							},
							anchor: {
								//表盘中指针的固定点
								show: false
							},
							title: {
								//仪表盘标题
								show: true,
								offsetCenter: [0, '40%'],
								color: '#BCBBCC',
								fontStyle: 'italic',
								fontWeight: 'bold',
								fontSize: 28
							},
							detail: {
								//仪表盘详情,用于显示数据
								show: true,
								valueAnimation: true, //是否开启标签的数字动画
								width: '60%',
								lineHeight: 40,
								borderRadius: 8,
								offsetCenter: ['0', '20%'],
								fontSize: 60,
								fontWeight: 'bolder',
								formatter: '{value}',
								color: 'rgba(76, 210, 137, 1)'
							},
							animation: true, //是否开启动画。
							data: [{
								value: this.valueData,
								name: 'steps'
							}]
						},
						{
							type: 'gauge',
							center: ['50%', '60%'],
							startAngle: 225,
							endAngle: -45,
							min: 0,
							max: 60,
							itemStyle: {
								color: '#4CD289'
							},
							progress: {
								show: true,
								width: 8,
								roundCap: true //两端是否显示圆形
							},
							pointer: {
								show: false
							},
							axisLine: {
								show: false
							},
							axisTick: {
								show: false
							},
							splitLine: {
								show: false
							},
							axisLabel: {
								show: false
							},
							detail: {
								show: false
							},
							data: [{
								value: this.valueData,
								// name: 'steps'
							}]
						}
					]
				};
				chart.setOption(option)
				return chart
			},
		},

	}
</script>
<style>
	.uni-ec-canvas {
		width: 100%;
		height: 500rpx;
		display: block;
		margin-top: 30rpx;
	}
</style>

 3.使用组件

//html
<view>
			<pie-chart :valueData="valueData"></pie-chart>
		</view>


//js
	import pieChart from './components/circleEchat.vue'//这里路径是你自定义组件的放的位置

data() {
			return {
				valueData: 10,
			}

	components: { pieChart }

 效果图:(小demo不要嫌丑hahaha)

android开发uniapp插件详细教程 uniapp插件使用_uni-app_06

  Echarts各式各样的定制化图表
 

Made A Pie 复刻Make A Pie 地址 Echarts社区makeapie 复刻Make A Pie 地址 MCChart 地址 PPChart 地址 ISQQW 地址 chartsdev 复刻Make A Pie 地址

文件太大怎么办?

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

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

下载的文件放在 uni-ec-canvas/echarts.js注意一定需要重命名为 echarts.js

下载了自定义最新版本的js文件后,发现样式不能用并且报错 TypeErreor: el.addEventListener is not a function

解决办法:

 还必须要用5.1.2版本的echarts 。因为小程序echarts插件文档 v2.1.1 默认是5.1.2版本。

官网上最新的为5.3.1版本 不匹配,小程序插件太久没更新了吧

解决办法来源于这里

23-4-12 更新------

图表画好了以后,准备下载压缩后的echart.js文件发现就不显示图表了,目前没找到原因,不压缩的echart文件就可以正常运行。

经漫长的找bug过程,发现下载压缩的echarts.js版本5.0.0 到5.2.2版本 我都测试都是可以运行的,其他版本没有测试。

uniapp插件版本1.0.3  想要是用成功,版本的对应很重要, 还有就是如果不报错但还是不显示图表,有可能是css样式高度或宽度没给,上述代码中我给的宽度是百分比,有时候百分比不生效就给定值,就可以解决。如果没有图表生成的话,那就给uni-ec-canvas组件加上:force-use-old-canvas="true"

android开发uniapp插件详细教程 uniapp插件使用_压缩版_07

 

android开发uniapp插件详细教程 uniapp插件使用_分隔线_08