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 相关文章推荐
类似框架的js代码
Nov 09 Javascript
javascript 表单验证常见正则
Sep 28 Javascript
javascript:void(0)点击登录没反应怎么解决
Nov 13 Javascript
JavaScript为事件句柄绑定监听函数实例详解
Dec 15 Javascript
基于node.js express mvc轻量级框架实践
Sep 14 Javascript
AngularJS中scope的绑定策略实例分析
Oct 30 Javascript
JS实现的缓冲运动效果示例
Apr 30 Javascript
Angular6中使用Swiper的方法示例
Jul 09 Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
Apr 19 Javascript
layer.open组件获取弹出层页面变量、函数的实例
Sep 25 Javascript
详解vue中多个有顺序要求的异步操作处理
Oct 29 Javascript
Vue页面刷新记住页面状态的实现
Dec 27 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
ThinkPHP3.1之D方法实例详解
2014/06/20 PHP
php中JSON的使用方法
2015/04/30 PHP
php生成酷炫的四个字符验证码
2016/04/22 PHP
PHP下的浮点运算不准的解决方法
2016/10/27 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
2016/11/09 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
再论Javascript的类继承
2011/03/05 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
2014/01/28 Javascript
json属性名为什么要双引号(个人猜测)
2014/07/31 Javascript
详解JS函数重载
2014/12/04 Javascript
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
BootStrap按钮标签及基本样式
2016/11/23 Javascript
bootstrap实现动态进度条效果
2017/03/08 Javascript
JavaScript数据结构之二叉树的计数算法示例
2017/04/13 Javascript
基于jQuery实现Ajax验证用户名是否可用实例
2018/03/25 jQuery
在Vue组件中获取全局的点击事件方法
2018/09/06 Javascript
jQuery中DOM操作原则实例分析
2019/08/01 jQuery
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
2019/09/21 Javascript
Python的Flask框架中配置多个子域名的方法讲解
2016/06/07 Python
python简单线程和协程学习心得(分享)
2017/06/14 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
2018/06/11 Python
将Dataframe数据转化为ndarry数据的方法
2018/06/28 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
springboot配置文件抽离 git管理统 配置中心详解
2019/09/02 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
澳大利亚电子产品购物网站:Dick Smith
2017/02/02 全球购物
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
先进党支部事迹材料
2014/01/13 职场文书
幼儿园教师个人反思
2014/01/30 职场文书
2014年三万活动总结
2014/04/26 职场文书
民族团结先进集体事迹材料
2014/05/22 职场文书
医生个人自我剖析材料
2014/10/08 职场文书
小学中等生评语
2014/12/29 职场文书
工作试用期自我评价
2015/03/10 职场文书
Python控制台输出俄罗斯方块的方法实例
2021/04/17 Python