微信小程序遍历Echarts图表实现多个饼图


Posted in Javascript onApril 25, 2019

如何在微信小程序中使用Echarts可以看我的另一个教程:点击查看

首先看一个简单的例子

1.wxml文件

<view style='width:100%;height:200rpx'>
 <ec-canvas id="mychart-dom-bar" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
</view>

2.js文件

import * as echarts from '../../common/ec-canvas/echarts';
function initChart(canvas, width, height) {
 const chart = echarts.init(canvas, null, {
  width: width,
  height: height
 })
 canvas.setChart(chart);
 var option = {
  series: [
   {
    name: '访问来源',
    type: 'pie',
    radius: ['60%', '70%'],
    animationType: 'scale',
    silent: true,
    labelLine: {
     normal: {
      show: false
     }
    },
    data: [
     {value:10},
     {value:3}
    ],
    color: ["#666", "#179B16"]
   }
  ]
 }
 chart.setOption(option);
 return chart;
}
Page({

 /**
  * 页面的初始数据
  */
 data: {
  ec: {
   onInit: initChart
  }
 }
})

3.json文件 (ec-canvas组件需要到官网下载,然后放到一个文件夹里面,然后在json文件中引入)

{
 "usingComponents":{
  "ec-canvas": "../../common/ec-canvas/ec-canvas"
 }
}

4.效果图

微信小程序遍历Echarts图表实现多个饼图

需求:假如有一个列表,每一条数据表示一个班级,然后通过图表展示出:女生人数占全班人数的比率。(如:上面效果图中的灰色部分表示全班人数,绿色部分表示女生人数)。

假如你已经懂了Echarts的基本配置,不懂的可以先看看官方文档:Echarts配置文档

基于上面例子我们进行分析一下:

从wxml文件可以看出ec-canvas组件定义了两个属性canvas-id和ec ,这种自定义属性一般用来传参,也就是传一些参数给ec-canvas组件内部。canvas-id我们暂时先不管,看一下ec ,在js文件中data里面定义了ec ,

ec它是一个对象,并且有个属性onInit 它的值是initChart函数(不是执行之后的喔),通过ec属性将initChart函数传入了ec-canvas组件内部,这时我们可以知道,initChart函数是在ec-canvas组件里面执行的。

打开ec-canvas.js文件,简单的看一下源码:

微信小程序遍历Echarts图表实现多个饼图

上图的两个属性,是通过组件传参的方式传进来的:

<ec-canvas id="mychart-dom-bar" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>

因为initChart函数赋值给了ec对象的onInit属性,所以我们可以搜索一下onInit ,可以发现它在init函数里面,如图:

微信小程序遍历Echarts图表实现多个饼图

我们先捋一捋这个逻辑,首先在引入组件的时候,通过ec属性传了个对象到ec-canvas组件内部,而这个对象有个属性onInit 值为一个函数,然后进入ec-canvas.js文件,在ready钩子函数中,判断ec对象是否存在(也就是判断用户是否传了ec进来),

如果存在,执行init方法,在上图中可以发现,init方法内部会执行onInit方法(如果条件满足的话),然后将函数返回的chart实例赋值给this.chart。

实现代码如下:

假如我们有个ecTest Page页。

1.wxml代码

<view class='test' wx:for="{{itemList}}" wx:for-item="item">
 <view>{{item.name}}</view>
 <view style='width:100%;height:200rpx'>
  <ec-canvas id="mychart-dom-bar" canvas-id="mychart-bar" tuData="{{item.data}}" ec="{{ ec }}"></ec-canvas>
 </view>
</view>

2.js代码

import * as echarts from '../../common/ec-canvas/echarts';
function initChart(canvas, width, height ,data) {//这里多加一个参数
 const chart = echarts.init(canvas, null, {
  width: width,
  height: height
 })
 canvas.setChart(chart);
 var option = {
  series: [
   {
    name: '访问来源',
    type: 'pie',
    radius: ['60%', '70%'],
    animationType: 'scale',
    silent: true,
    labelLine: {
     normal: {
      show: false
     }
    },
    data: data,
    color: ["#666", "#179B16"]
   }
  ]
 }
 chart.setOption(option);
 return chart;
}
Page({

 /**
  * 页面的初始数据
  */
 data: {
  ec: {
   onInit: initChart
  },
  itemList:[
   { name: '一年级', data: [{ value: 10 }, { value: 1 }] },
   { name: '二年级', data: [{ value: 10 }, { value: 4 }] },
   { name: '三年级', data: [{ value: 10 }, { value: 7 }] },
  ]
 }
})

3.修改ec-canvas.js文件(这个文件是从echarts官网下载的)

在wxml文件里,引用ec-canvas组件时,传了个tuData参数过去,所以我们需要在组件内部接收一下,在ec-canvas.js文件里面找到properties对象,

properties: {
  canvasId: {
   type: String,
   value: 'ec-canvas'
  },

  ec: {
   type: Object
  },
  tuData:{//这是新增的参数
   type: Object
  }
 }

4.找到init方法,将tuData传入onInit方法里面即可

微信小程序遍历Echarts图表实现多个饼图

5.效果图

微信小程序遍历Echarts图表实现多个饼图

总结:因为chart实例是在ec-canvas组件内部才创建的,其它页面使用ec-canvas组件时,通过传参的方式,将实例化chart的方法通过ec属性传入ec-canvas组件内部进行实例化,

所以我们可以借助这一点,把我们的数据也通过传参的方式传入ec-canvas内部即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 出生日期和身份证判断大全
Nov 13 Javascript
javascript算法学习(直接插入排序)
Apr 12 Javascript
jQuery实现冻结表头的方法
Mar 09 Javascript
JS使用cookie设置样式的方法
Jun 30 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
Jan 20 Javascript
jQuery插件FusionCharts绘制的2D帕累托图效果示例【附demo源码】
Mar 28 jQuery
JS 组件系列之BootstrapTable的treegrid功能
Jun 16 Javascript
JavaScript 有用的代码片段和 trick
Feb 22 Javascript
jquery实现下载图片功能
Jul 18 jQuery
layer.js open 隐藏滚动条的例子
Sep 05 Javascript
Vue学习之组件用法实例详解
Jan 06 Javascript
Vue+webpack实现懒加载过程解析
Feb 17 Javascript
在微信小程序中使用图表的方法示例
Apr 25 #Javascript
详解VUE Element-UI多级菜单动态渲染的组件
Apr 25 #Javascript
WebGL three.js学习笔记之阴影与实现物体的动画效果
Apr 25 #Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
Apr 25 #Javascript
Angular封装搜索框组件操作示例
Apr 25 #Javascript
Vue使用zTree插件封装树组件操作示例
Apr 25 #Javascript
详解javascript中的Error对象
Apr 25 #Javascript
You might like
PHP脚本的10个技巧(1)
2006/10/09 PHP
PHP日期时间函数的高级应用技巧
2009/05/16 PHP
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
2013/06/19 PHP
thinkPHP实现的联动菜单功能详解
2017/05/05 PHP
css把超出的部分显示为省略号的方法兼容火狐
2008/07/23 Javascript
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
jQuery EasyUI datagrid实现本地分页的方法
2015/02/13 Javascript
JavaScript 事件绑定及深入
2015/04/13 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
JSON与String互转的实现方法(Javascript)
2016/09/27 Javascript
jquery中绑定事件的异同
2017/02/28 Javascript
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
2017/09/28 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
Vuex的初探与实战小结
2018/11/26 Javascript
JQuery判断radio单选框是否选中并获取值的方法
2019/01/17 jQuery
在vue-cli创建的项目中使用sass操作
2020/08/10 Javascript
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
python在控制台输出进度条的方法
2015/06/20 Python
Python常用内置模块之xml模块(详解)
2017/05/23 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
树莓派3 搭建 django 服务器的实例
2019/08/29 Python
Python定时发送天气预报邮件代码实例
2019/09/09 Python
Python正则表达式高级使用方法汇总
2020/06/18 Python
Python实现GIF图倒放
2020/07/16 Python
python excel和yaml文件的读取封装
2021/01/12 Python
CSS3中:nth-child和:nth-of-type的区别深入理解
2014/03/10 HTML / CSS
recorder.js 基于Html5录音功能的实现
2020/05/26 HTML / CSS
英国婴儿和儿童服装网站:Vertbaudet
2018/04/02 全球购物
护士的自我鉴定
2014/02/07 职场文书
工作鉴定评语
2014/05/04 职场文书
初二学生评语大全
2014/12/26 职场文书
故宫的导游词
2015/01/31 职场文书
劳动仲裁调解书
2015/05/20 职场文书
Android Studio实现简易进制转换计算器
2022/05/20 Java/Android