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 相关文章推荐
nw.js实现类似微信的聊天软件
Mar 16 Javascript
jQuery插件ajaxfileupload.js实现上传文件
Oct 23 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
Feb 15 Javascript
Node.js使用NodeMailer发送邮件实例代码
Mar 06 Javascript
vue Render中slots的使用的实例代码
Jul 19 Javascript
vue 实现数字滚动增加效果的实例代码
Jul 06 Javascript
解决vue 绑定对象内点击事件失效问题
Sep 05 Javascript
vue使用rem实现 移动端屏幕适配
Sep 26 Javascript
JavaScript实现数字前补“0”的五种方法示例
Jan 03 Javascript
jquery ajax 请求小技巧实例分析
Nov 11 jQuery
利用H5api实现时钟的绘制(javascript)
Sep 13 Javascript
JavaScript 如何在浏览器中使用摄像头
Dec 02 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
多重?l件?合查?(一)
2006/10/09 PHP
无数据库的详细域名查询程序PHP版(2)
2006/10/09 PHP
PHP面向对象编程快速入门
2006/12/14 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
2015/03/04 PHP
JavaScript iframe的相互操作浅析
2009/10/14 Javascript
基于jquery库的tab新形式使用
2012/11/16 Javascript
javascript实现日历控件(年月日关闭按钮)
2012/12/12 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
js切换光标示例代码
2013/10/10 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
javascript中兼容主流浏览器的动态生成iframe方法
2014/05/05 Javascript
Jquery实现仿腾讯微博发表广播
2014/11/17 Javascript
javascript 操作符(~、&amp;、|、^、)使用案例
2014/12/31 Javascript
javascript实现在下拉列表中显示多级树形菜单的方法
2015/08/12 Javascript
javascript实现点击单选按钮链接转向对应网址的方法
2015/08/12 Javascript
浅析JS异步加载进度条
2016/05/05 Javascript
bootstrap table小案例
2016/10/21 Javascript
Vue.js bootstrap前端实现分页和排序
2017/03/10 Javascript
Angular6封装http请求的步骤详解
2018/08/13 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
Vue.js子组件向父组件通信的方法实例代码详解
2018/12/10 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
Python检测网站链接是否已存在
2016/04/07 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
Django在win10下的安装并创建工程
2017/11/20 Python
python爬虫爬取幽默笑话网站
2019/10/24 Python
PyQt中使用QtSql连接MySql数据库的方法
2020/07/28 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
2020/12/13 Python
html5 postMessage前端跨域并前端监听的方法示例
2018/11/01 HTML / CSS
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
旧时光糖果:Old Time Candy
2018/02/05 全球购物
物流经理自我评价
2013/09/23 职场文书
小学生田径运动会广播稿
2014/09/11 职场文书
锅炉工岗位职责
2015/02/13 职场文书
大队委员竞选演讲稿
2015/11/20 职场文书
Java实现多文件上传功能
2021/06/30 Java/Android