在Vue 中实现循环渲染多个相同echarts图表


Posted in Javascript onJuly 20, 2020

在开发过程中我们常常需要,在一个页面中使用相同的图表来展示同级别的多个事物(如:同级别的多个不同id的仓库、同级别的多个不同id的设备等)。

在Vue 中实现循环渲染多个相同echarts图表

上图效果实现代码:

<template>
 <div class="projectCost">
 <div class="container">
  <div class="wrapper" v-for="(item,index) in list" :key="index"> 
  <div class="roseChart"></div> // 使用class,不是id
  </div>
 </div>
 </div>
</template>

<script>
export default {
 data(){
 return {
  list:[ // 假数据
  {
   id:1,
   price:{
   name:'项目一',
   resData:[
    {name:'订购费用',value:12},
    {name:'饲养费用',value:18},
    {name:'实验费用',value:8},
    {name:'其他费用',value:10},
   ]
   }
  },{
   id:2,
   price:{
   name:'项目二',
   resData:[
    {name:'订购费用',value:18},
    {name:'饲养费用',value:10},
    {name:'实验费用',value:20},
    {name:'其他费用',value:9},
   ]
   }
  }
  ]
 }
 },
 methods:{
 drawRose(){
  var echarts = require("echarts");
  var roseCharts = document.getElementsByClassName('roseChart'); // 对应地使用ByClassName
  for(var i = 0;i < roseCharts.length;i++ ){ // 通过for循环,在相同class的dom内绘制元素
  var myChart = echarts.init(roseCharts[i]);
  myChart.setOption({
   color: ["#4DFFFD", "#7B3FF6", "#1F6DFE", "#34A6FE"],
   title: {
   text: this.list[i].price.name,
   left: '70',
   top: 5,
   textStyle: {
    color: '#4DFFFD',
    fontSize: 14,
   }
   },
   tooltip: {
   trigger: 'item',
   formatter: "{b} : {c} ({d}%)"
   },
   legend: {
   type: "scroll",
   orient: "vartical",
   top: "center",
   right: '0px',
   itemWidth: 16,
   itemHeight: 8,
   itemGap: 16,
   textStyle: {
    color: '#FFFFFF',
    fontSize: 12,
   },
   data: ['订购费用', '饲养费用', '实验费用', '其他费用']
   },
   polar: {
   center:['36%','56%'],
   },
   angleAxis: {
   interval: 3, // 强制设置坐标轴分割间隔
   type: 'category',
   z: 10,
   axisLine: {show: false},
   axisLabel: {show: false},
   },
   radiusAxis: {
   min: 10,
   max: 1000,
   interval: 200,
   axisLine: {show: false},
   axisLabel: {show: false},
   splitLine: {
    lineStyle: {
    color: "#2277C3",
    width: 1,
    type: "solid"
    }
   }
   },
   calculable: true,
   series: [
   {
    type: 'pie',
    radius: ["10%", "14%"],
    center:['36%','56%'],
    hoverAnimation: false,
    labelLine: {show: false},
    data: [{
    value: 0,
    itemStyle: {
     normal: {
     color: "#809DF5"
     }
    }
    }]
   },{
    stack: 'a',
    type: 'pie',
    radius: ['20%', '80%'],
    center:['36%','56%'],
    roseType: 'area',
    zlevel:10,
    label: {show: false},
    labelLine: {show: false},
    data: this.list[i].price.resData // 渲染每个图表对应的数据
   }]
  	})
  }
 }
 },
 mounted(){
 this.drawRose()
 }
}
</script>

<style lang="scss" scoped>
.projectCost{
 margin-left: 40px;
 .container{
 display: flex;
 width: 680px;
 height: 240px;
 background-size: 100% 100%;
 // background-image: url('../../../assets/images/projectTest/costDetail.png');
 .wrapper{
  margin-top: 20px;
  width: 340px;
  height:180px;
  border-right: 1px solid #0B61B3;
  .roseChart{
  width: 260px;
  height:180px;
  }
 }
 }
}
</style>

补充知识:echarts 同时控制多个图表的属性值变更

echarts v4.x 版本如何同时控制多个图标的属性值变更

简单理解:

echarts为一个对象形式出现在代码中,通过 Canvas、SVG(4.0+)、VML 的形式渲染图表

实现方法:

echarts.init 方法初始化一个 echarts 实例并通过 setOption 方法生成一个简单的图表

需求:

将页面多个图表渲染完成后 选择更新数据或者查看固定时间段区域数据等按钮实现动态的改变echarts的图表数据表现。

分析:

1、首先对于echarts而言,每个图表都是一个单独的echarts对象,那么我们只需要将每个对象获取到并通过getOption()函数获取到每个对象的属性,并对其赋值。

2、然后通过setOption(echartsObject)方法对其执行渲染就可以了(echartsObject为每个echarts对象)。

设计思路:

1、设置一个全局数组用来装入每一个echarts对象。

var myCharts=[];

然后在每个echarts实例化完成后将当前的echarts对象放进myCharts数组中。

function darwChart(id, monitorItemData, monitorItemDecimal,oiltime) {
 ...
 var chartid = "chart_" + id;
 chartid = echarts.init(dom);
 chartid.setOption(option={...})
 myCharts.push(chartid);
 ...
}

注:这里说明id为每个表加载的时候获取的数据id,本人通过这个id来区分不同的echarts对象,如果设置多个方法互相不关联,可以不用这么写,这里自由分配,主要理解实现思想。

2、然后外部按钮触发事件的方法:循环赋值实现,这里就简单了。ok,祝你成功。

function gettimeradio(){
 var rr = $('input:radio[name="r2"]:checked').attr('id');
 Xmin = getDateTime(rr);
 Xmax = getDateTime(0);
 myCharts = Array.from(new Set(myCharts));
 myCharts.forEach(data=>{
  var chart = data.getOption();
  chart.xAxis[0].min =Xmin ;
  chart.xAxis[0].max =Xmax ;
  data.setOption(chart); 
 })
}

以上这篇在Vue 中实现循环渲染多个相同echarts图表就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
各种效果的jquery ui(接口)介绍
Sep 17 Javascript
JS 自动安装exe程序
Nov 30 Javascript
仅img元素创建后不添加到文档中会执行onload事件的解决方法
Jul 31 Javascript
AngularJS的内置过滤器详解
May 14 Javascript
javaScript实现滚动新闻的方法
Jul 30 Javascript
jQuery实现图片上传和裁剪插件Croppie
Nov 29 Javascript
JavaScript暂停和继续定时器的实现方法
Jul 18 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
Aug 01 Javascript
three.js实现3D视野缩放效果
Nov 16 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
Mar 13 Javascript
JS实现二维数组横纵列转置的方法
Apr 17 Javascript
Angular2中监听数据更新的方法
Aug 31 Javascript
解决echarts数据二次渲染不成功的问题
Jul 20 #Javascript
详细分析vue表单数据的绑定
Jul 20 #Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
Jul 20 #Javascript
mpvue 项目初始化及实现授权登录的实现方法
Jul 20 #Javascript
解决echarts中横坐标值显示不全(自动隐藏)问题
Jul 20 #Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
Jul 20 #Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
Jul 20 #Javascript
You might like
php 购物车实例(申精)
2009/05/11 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
php判断是否为ajax请求的方法
2016/11/29 PHP
PHP MYSQL简易交互式站点开发
2016/12/27 PHP
jquery固定底网站底部菜单效果
2013/08/13 Javascript
jquery无法设置checkbox选中即没有变成选中状态
2014/03/27 Javascript
jQuery插件Slider Revolution实现响应动画滑动图片切换效果
2015/06/05 Javascript
js实现头像图片切割缩放及无刷新上传图片的方法
2015/07/17 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
js实现可折叠展开的手风琴菜单效果
2015/09/07 Javascript
JavaScript:Array类型全面解析
2016/05/19 Javascript
javascript显示倒计时控制按钮的简单实现
2016/06/07 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
Angular4 中常用的指令入门总结
2017/06/12 Javascript
详解vue父子组件间传值(props)
2017/06/29 Javascript
iscroll.js滚动加载实例详解
2017/07/18 Javascript
canvas基础绘制-绚丽倒计时的实例
2017/09/17 Javascript
JS实现滑动导航效果
2020/01/14 Javascript
JS+DIV实现拖动效果
2020/02/11 Javascript
Python实现的检测web服务器健康状况的小程序
2014/09/17 Python
Pycharm学习教程(3) 代码运行调试
2017/05/03 Python
python实现神经网络感知器算法
2017/12/20 Python
python 读文件,然后转化为矩阵的实例
2018/04/23 Python
python+mysql实现教务管理系统
2019/02/20 Python
python getpass模块用法及实例详解
2019/10/07 Python
上海某公司.net方向笔试题
2014/09/14 面试题
企业军训感想
2014/02/07 职场文书
消防战士优秀事迹材料
2014/02/13 职场文书
工地安全质量标语
2014/06/07 职场文书
低碳环保标语
2014/06/12 职场文书
春节超市活动方案
2014/08/14 职场文书
教师节感谢信
2015/01/22 职场文书
2015年“七七卢沟桥事变”纪念活动总结
2015/03/24 职场文书
家长对学校的意见和建议
2015/06/03 职场文书
安娜卡列尼娜观后感
2015/06/11 职场文书
oracle数据库去除重复数据
2022/05/20 Oracle