echarts.js 动态生成多个图表 使用vue封装组件操作


Posted in Javascript onJuly 19, 2020

组件只做了简单的传值处理,记录开发思路及echarts简单使用。

这里默认所有图表样式一致,都为柱状图,如需其他类型,可查阅echarts官网文档,再动态传值即可。

vue 使用组件 ------在外层用v-for 循环,传不同值进charts 即可

<!-- 传入对应的数据给子组件 -->
   <charts
    :options="item.select" 
    :id='"charts" +index'
    :index="index"
    style="width: 900px;height:400px;"
   ></charts>
   <!-- 传入对应的数据给子组件 end -->

vue创建子组件-----初始化空模板

<!-- 图表组件 -->
 <template>
  <div></div>
 </template>
 <!-- 图表组件 end -->

主要部分 ------ 初始化echarts.js

Vue.component('charts', {
  template: '#charts',  
  // 传入对应的数值与动态index
  props: ['options', 'index'],
  methods: {
   initOption() {
   var that = this
   var arr1 = [] // x轴刻度
   var arr2 = [] // y轴数据值
 
    // 取出需要的数据
   this.options.forEach(element => {
    arr1.push(element.selectedTopic)
    arr2.push(element.peopleNum)
   })
 
   // 基于准备好的dom,初始化echarts实例
   var myChart = echarts.init(
    document.getElementById('charts' + this.index)
   )
 
   // 指定图表的配置项和数据
   var option = {
    color: ['#3582F8'],
    tooltip: {
    trigger: 'axis',
    axisPointer: {
     // 坐标轴指示器,坐标轴触发有效
     type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
    }
    },
    grid: {
    left: '3%',
    right: '4%',
    bottom: '3%',
    containLabel: true
    },
    xAxis: [
    {
     type: 'category',
     data: arr1, // X轴的刻度
     axisTick: {
     alignWithLabel: true
     }
    }
    ],
    yAxis: [
    // y轴的刻度值自动调整
    {
     type: 'value'
    }
    ],
    series: {
    name: 'y轴数值',
    type: 'bar',
    barWidth: '60%',
    data: arr2 // 具体选择数值
    }
   }
 
   // 使用刚指定的配置项和数据显示图表。
   myChart.setOption(option)
   }
  },
  mounted() {
   this.initOption()
  },
  created() {}
  })

补充知识:vue根据获取的数据动态循环渲染多个echart(多个dom节点,多个ID)

//在dom节点加载之后调用渲染echart仪表盘方法,this.$nextTick(function(){ }

<div class="chart">
 
     <div class="geo" v-for="(dataval, index) in dataVal" :key="index" :id="forId(index)"></div>
 
</div>
methods: {
 forId:function(index){
  return "geo_" +index
 },
 
 mapTree() {
   this.$nextTick(function(){
    for(var i=0;i<this.dataVal.length;i++){
      //获取id放入数组中,以便下面渲染echart仪表盘使用
     this.getId.push(this.$echarts.init(document.getElementById('geo_'+i)));
     this.getId[i].setOption({
      title: {
       text: this.dataVal[i].name+'栋',
       textStyle: {
        color: '#00f2f1',
        fontSize: 14
       },
       left: 'center',
       top: 5
      },
      tooltip: {
       formatter: '{a} <br/>{c}'
      },
      series:[
      {
       name: '工作电表数',
       type: 'gauge',
       radius: '80%',
       min: 0,
       max: Number(this.dataVal[i].sum),
       splitNumber: 10,
       axisLine: {      // 坐标轴线
        lineStyle: {    // 属性lineStyle控制线条样式
          color: [[0.30, '#ff4500'], [0.80, '#1e90ff'], [1, 'lime']],
          width: 1,
          shadowColor: '#fff', //默认透明
        }
       },
       axisLabel: {      // 坐标轴小标记
        color: '#fff',
        shadowColor: '#fff', //默认透明
        shadowBlur: 10
       },
       axisTick: {      // 坐标轴小标记
        length: 4,    // 属性length控制线长
        lineStyle: {    // 属性lineStyle控制线条样式
          color: 'auto',
          shadowColor: '#fff', //默认透明
          shadowBlur: 10
        }
       },
       splitLine: {      // 分隔线
        length: 7,     // 属性length控制线长
        lineStyle: {    // 属性lineStyle(详见lineStyle)控制线条样式
         width: 2,
         color: '#fff',
         shadowColor: '#fff', //默认透明
         shadowBlur: 10
        }
       },
       pointer: {      // 分隔线
        width:4,//指针的宽度
        length:"70%", //指针长度,按照半圆半径的百分比
        shadowColor: '#fff', //默认透明
        shadowBlur: 5
       },
       title: {
        textStyle: {    // 其余属性默认使用全局文本样式,详见TEXTSTYLE
         fontWeight: 'bolder',
         fontSize: 10,
         fontStyle: 'italic',
         color: '#fff',
         shadowColor: '#fff', //默认透明
         shadowBlur: 10
        }
       },
       detail: {
        fontSize: 12,
       },
       data: [{value: this.dataVal[i].normalSum, name: ''}]
      }]
     });
    }
   })
  }
}

以上这篇echarts.js 动态生成多个图表 使用vue封装组件操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery用unbind方法去掉hover事件及其他方法介绍
Mar 18 Javascript
JS判断文本框内容改变事件的简单实例
Mar 07 Javascript
分享五个有用的jquery小技巧
Oct 08 Javascript
JavaScript提升性能的常用技巧总结【经典】
Jun 20 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
Jul 22 Javascript
JS手机端touch事件计算滑动距离的方法示例
Oct 26 Javascript
js实现rem自动匹配计算font-size的示例
Nov 18 Javascript
JS设计模式之访问者模式定义与用法分析
Feb 05 Javascript
对layui中的onevent 和event的使用详解
Sep 06 Javascript
node.js开发辅助工具nodemon安装与配置详解
Feb 06 Javascript
原生js实现密码强度验证功能
Mar 18 Javascript
JS 4个超级实用的小技巧 提升开发效率
Oct 05 Javascript
JavaScript中reduce()的5个基本用法示例
Jul 19 #Javascript
JS中作用域以及变量范围分析
Jul 18 #Javascript
JS中的变量作用域(console版)
Jul 18 #Javascript
js里面的变量范围分享
Jul 18 #Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
Jul 18 #Javascript
深入理解 ES6中的 Reflect用法
Jul 18 #Javascript
详谈Object.defineProperty 及实现数据双向绑定
Jul 18 #Javascript
You might like
PHP目录函数实现创建、读取目录教程实例
2011/01/13 PHP
PHP计算一年多少个星期和每周的开始和结束日期
2014/07/01 PHP
destoon首页调用求购供应信息的地区名称的方法
2014/08/21 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
2019/04/15 PHP
docker-compose部署php项目实例详解
2019/07/30 PHP
php函数式编程简单示例
2019/08/08 PHP
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
2013/07/13 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
2014/01/02 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
使用javaScript动态加载Js文件和Css文件
2015/10/24 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
详解JavaScript对象的深浅复制
2017/03/30 Javascript
Cropper.js 实现裁剪图片并上传(PC端)
2017/08/20 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
vue.js中ref及$refs的使用方法解析
2019/10/08 Javascript
python下如何查询CS反恐精英的服务器信息
2017/01/17 Python
Python标准库sched模块使用指南
2017/07/06 Python
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
解决os.path.isdir() 判断文件夹却返回false的问题
2019/11/29 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
CSS3实现类似翻书效果的过渡动画的示例代码
2019/09/06 HTML / CSS
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
退休感言
2014/01/28 职场文书
物理教学随笔感言
2014/02/22 职场文书
公司合作意向书
2014/04/01 职场文书
房屋转让协议书范本
2014/04/11 职场文书
演讲稿格式范文
2014/05/19 职场文书
家庭教育的心得体会
2014/09/01 职场文书
职称评定个人总结
2015/03/05 职场文书
2015年电话客服工作总结
2015/05/18 职场文书
2015年学校办公室主任工作总结
2015/07/20 职场文书
2015年“我们的节日·中秋节”活动总结
2015/07/30 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
python index() 与 rindex() 方法的使用示例详解
2022/12/24 Python