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 相关文章推荐
js form action动态修改方法
Nov 04 Javascript
JS根据变量保存方法名并执行方法示例
Apr 04 Javascript
node.js中的fs.chownSync方法使用说明
Dec 16 Javascript
jquery实现的判断倒计时是否结束代码
Feb 05 Javascript
jQuery实现每隔几条元素增加1条线的方法
Jun 27 Javascript
利用js编写响应式侧边栏
Sep 17 Javascript
JavaScript实现的select点菜功能示例
Jan 16 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
Jul 17 jQuery
JS开发中基本数据类型具体有哪几种
Oct 19 Javascript
zepto.js 实时监听输入框的方法
Dec 04 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
Jan 29 Javascript
5个实用的JavaScript新特性
Jun 16 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写的采集程序
2007/03/16 PHP
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
PHP+AJAX实现投票功能的方法
2015/09/28 PHP
PHP生成短网址的思路以及实现方法的详解
2019/03/25 PHP
extjs 学习笔记 四 带分页的grid
2009/10/20 Javascript
jquery ajax提交表单数据的两种方式
2009/11/24 Javascript
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
jQuery 学习入门篇附实例代码
2010/03/16 Javascript
Jquery 的扩展方法总结
2011/10/01 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
angularjs的一些优化小技巧
2014/12/06 Javascript
jQuery中first()方法用法实例
2015/01/06 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
学习JavaScript设计模式之责任链模式
2016/01/18 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
2016/11/25 Javascript
bootstrapValidator自定验证方法写法
2016/12/01 Javascript
html5+canvas实现支持触屏的签名插件教程
2017/05/08 Javascript
AngularJS实现图片上传和预览功能的方法分析
2017/11/08 Javascript
Python处理字符串之isspace()方法的使用
2015/05/19 Python
python实现各进制转换的总结大全
2017/06/18 Python
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
解决Shell执行python文件,传参空格引起的问题
2018/10/30 Python
Python Matplotlib 基于networkx画关系网络图
2019/07/10 Python
django 类视图的使用方法详解
2019/07/24 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
2019/09/26 Python
Pycharm小白级简单使用教程
2020/01/08 Python
jupyter notebook更换皮肤主题的实现
2021/01/07 Python
Rentalcars.com中国:世界上最大的在线汽车租赁服务
2019/08/22 全球购物
给同事的道歉信
2014/01/11 职场文书
办公室主任职责范本
2014/03/07 职场文书
中学学校门卫岗位职责
2014/08/15 职场文书
科学发展观演讲稿
2014/09/11 职场文书
党员教师四风问题对照检查材料
2014/09/26 职场文书
派出所副所长四风问题个人整改措施思想汇报
2014/10/13 职场文书
2015年文明创建工作总结
2015/04/30 职场文书
解决pytorch 损失函数中输入输出不匹配的问题
2021/06/05 Python