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 相关文章推荐
JQuery 国际象棋棋盘 实现代码
Jun 26 Javascript
javascript控制frame,iframe的src属性代码
Dec 31 Javascript
JQuery 自定义CircleAnimation,Animate方法学习笔记
Jul 10 Javascript
js简单实现删除记录时的提示效果
Dec 05 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
Oct 30 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
May 21 Javascript
利用JavaScript阻止表单提交的两种方法
Aug 11 Javascript
纯JS打造网页中checkbox和radio的美化效果
Oct 13 Javascript
vue使用laydate时间插件的方法
Nov 14 Javascript
D3.js的基础部分之数组的处理数组的排序和求值(v3版本)
May 09 Javascript
jQuery实现input输入框获取焦点与失去焦点时提示的消失与显示功能示例
May 27 jQuery
分享几个JavaScript运算符的使用技巧
Apr 24 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
php下intval()和(int)转换使用与区别
2008/07/18 PHP
yii中widget的用法
2014/12/03 PHP
PHP中PDO事务处理操作示例
2018/05/02 PHP
农历与西历对照
2006/09/06 Javascript
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
js计算页面刷新的次数
2009/07/20 Javascript
jquery可见性过滤选择器使用示例
2013/06/24 Javascript
js有序数组的连接问题
2013/10/01 Javascript
javascript在子页面中函数无法调试问题解决方法
2014/01/17 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
JavaScript Serializer序列化时间处理示例
2014/07/31 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
解析ajaxFileUpload 异步上传文件简单使用
2016/12/30 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
jQuery Pagination分页插件_动力节点Java学院整理
2017/07/17 jQuery
关于定制FileField中的上传文件名称问题
2017/08/22 Javascript
总结js函数相关知识点
2018/02/27 Javascript
基于Vue实现关键词实时搜索高亮显示关键词
2018/07/21 Javascript
基于Vue实现微信小程序的图文编辑器
2018/07/25 Javascript
Layui Form 自定义验证的实例代码
2019/09/14 Javascript
js实现点赞效果
2020/03/16 Javascript
Python multiprocessing模块中的Pipe管道使用实例
2015/04/11 Python
Python中将字典转换为XML以及相关的命名空间解析
2015/10/15 Python
Python中文编码知识点
2019/02/18 Python
Python如何优雅获取本机IP方法
2019/11/10 Python
Python安装whl文件过程图解
2020/02/18 Python
Python reduce函数作用及实例解析
2020/05/08 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
html5表单及新增的改良元素详解
2016/06/07 HTML / CSS
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
美国领先的机场停车聚合商:Airport Parking Reservations
2020/02/28 全球购物
梅花魂教学反思
2014/04/25 职场文书
2015年银行员工工作总结
2015/04/24 职场文书
红歌会主持词
2015/07/02 职场文书
教师节祝酒词
2015/08/11 职场文书