vue在使用ECharts时的异步更新和数据加载详解


Posted in Javascript onNovember 22, 2017

前言

最近在学习eCharts,学习到了异步更新和数据加载这一块,觉着有必要总结一下,方法以后的时候参考学习,在开始本文之前,对eCharts不熟悉的朋友们可以参考下这篇文章:https://3water.com/article/128790.htm  下面话不多说了,来一起看看详细的介绍吧。

使用方法

使用Echarts首先得先把Echarts.js引进来(放在文件的入口html文件里面)

<script src="public/js/echarts.common.min.js"></script>

 

在绘图前我们需要为 ECharts 准备一个具备高宽的 DOM 容器

<div id="main" style="width: 600px;height:400px;"></div>

初始化一个 echarts 实例并通过 setOption 方法生成一个你想要的图表类型,

首先先把,echarts里setOption的option,单独领出来,初始化放在data里

data() { return { 




getSetOption: {//折线图

    title: {

     text: null

    },

    tooltip: {

     trigger: 'axis'

    },

    grid: {

     left: '3%',

     right: '4%',

     bottom: '3%',

     containLabel: true

    },

    yAxis: {

     type: 'value'

    },

    legend: {

     data: []

    },

 

    xAxis: {

     type: 'category',

     data: []

    },

 

    series: [

     {

      name: null,

      type: 'line',

      stack: '总人数',

      data: []

     }

    ]

   },

 

   getPieOption: {//饼图

    title: { 

     text: null 

    },

 

    tooltip: {

     tooltip: 'item',

     formatter: "{a} <br/> {b} : {c} ({d}%)"

    },

    series : [

     {

      type: 'pie',

      radius: '55%',

      data:[

      ].sort(function(a,b){return a.value - b.value;}),

      roseType: 'angle',

     }

    ]

   },


}

}

下面是在methods里初始化的一个方法, 

drawLineChart() {

   this.lineChartOrder = echarts.init(document.getElementById('lineChartOrder'));

   this.lineChartOrder.setOption(this.getSetOption); 

  },

然后在mounted里调用这个方法

this.drawLineChart(),

接下来就就是数据异步加载与更新了。

以下的代码是本地的json类型,异步加载数据时只要填入数据,然后在series里根据名字对应到相应的系列就可以了。

getOrderTotal(){//获取一段时间内的订单统计

   api.getOrderStatistical(this.begin, this.end,this.kId)

   .then(res => {

    if (res.data.ok && res.data.r.length) {

 

     const

      results = res.data.r, 

      legends = results.map(item => ({

       name: item.channelName,

       data: item.dateStatisticals

      }))

     

     this.lineChartOrder.setOption({

      title: {

       text: '订单统计'

      },

      legend: {

       data: legends.map(item => item.name)

      },

 

      xAxis: {

       data: legends[0].data.map(item => item.date)

      },

 

      series: legends.map(item => {

       return {

        type: 'line',

        name: item.name,

        data: item.data.map(item => item.count)

       }

      })

     })

    }

   }).catch(err => {

    // console.log(err)

   })

但是,echarts的数据是直接merge的,所以当出现多条折线时,如果当天的数据为0,或者后台传过来的数据为空的时候,setOption的值根本就没有更新,而是直接merge了,所以这个问题就头大了。

对于这个问题的解决方法是

用getOption取到已经存在的option, 然后用this.lineChartOrder.setOption.clear() ,清空option,最后this.lineChartOrder.setOption(option, false, false)

这样就可以清掉了。

以下是官网异步数据加载与更新的方法,会相对简单些。

// 异步加载数据

 $.get('data.json').done(function (data) {

// 填入数据

 

myChart.setOption({

 

 xAxis: {

  data: data.categories

 },

 series: [{

  // 根据名字对应到相应的系列

  name: '销量',

  data: data.data

 }]

});

只需要将数据填充进入就可以了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
Mootools 1.2教程 同时进行多个形变动画
Sep 15 Javascript
MooTools 页面滚动浮动层智能定位实现代码
Aug 23 Javascript
jquery $.each 和for怎么跳出循环终止本次循环
Sep 27 Javascript
基于JS实现PHP的sprintf函数实例
Nov 14 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
Aug 03 Javascript
Vue 中使用vue2-highcharts实现曲线数据展示的方法
Mar 05 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
May 29 Javascript
在vue项目中,将juery设置为全局变量的方法
Sep 25 Javascript
jsonp跨域获取百度联想词的方法分析
May 13 Javascript
Layui表格监听行单双击事件讲解
Nov 14 Javascript
JavaScript组合模式---引入案例分析
May 23 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
Sep 02 Javascript
echarts学习笔记之箱线图的分析与绘制详解
Nov 22 #Javascript
解析Vue2 dist 目录下各个文件的区别
Nov 22 #Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
Nov 22 #Javascript
echarts学习笔记之图表自适应问题详解
Nov 22 #Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
Nov 22 #Javascript
在vue中添加Echarts图表的基本使用教程
Nov 22 #Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
Nov 22 #Javascript
You might like
文件系统基本操作类
2006/11/23 PHP
php设计模式之单例模式用法经典示例分析
2019/09/20 PHP
学习YUI.Ext 第四天--对话框Dialog的使用
2007/03/10 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
javascript中关于执行环境的杂谈
2011/08/14 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
原生js实现可拖动的登录框效果
2017/01/21 Javascript
详解Node.js实现301、302重定向服务
2017/04/07 Javascript
js统计页面上每个标签的数量实例代码
2018/05/29 Javascript
Angular5中状态管理的实现
2018/09/03 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
2019/05/02 Javascript
js字符串类型String常用操作实例总结
2019/07/05 Javascript
vue-form表单验证是否为空值的实例详解
2019/10/29 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
浅谈vue中resetFields()使用注意事项
2020/08/12 Javascript
Python实现把xml或xsl转换为html格式
2015/04/08 Python
Python实现iOS自动化打包详解步骤
2018/10/03 Python
python动态进度条的实现代码
2019/07/03 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
2020/02/23 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
阻止移动设备(手机、pad)浏览器双击放大网页的方法
2014/06/03 HTML / CSS
Canvas多边形绘制的实现方法
2019/08/05 HTML / CSS
全球航班旅行搜索网站:Cheapflights
2017/05/19 全球购物
德国孕妇装和婴童服装网上商店:bellybutton
2018/04/12 全球购物
学校校庆演讲稿
2014/05/22 职场文书
完美的中文自荐信
2014/05/24 职场文书
写景作文评语集锦
2014/12/25 职场文书
2015年求职自荐信范文
2015/03/04 职场文书
小学生家长意见
2015/06/03 职场文书
2016党员党课心得体会
2016/01/07 职场文书
el-form每行显示两列底部按钮居中效果的实现
2022/08/05 HTML / CSS