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 相关文章推荐
IE与Firefox在JavaScript上的7个不同写法小结
Sep 14 Javascript
javascript之学会吝啬 精简代码
Apr 25 Javascript
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
Apr 27 Javascript
探讨jQuery的ajax使用场景(c#)
Dec 03 Javascript
js中AppendChild与insertBefore的用法详细解析
Dec 16 Javascript
Javascript实现简单的富文本编辑器附演示
Jun 16 Javascript
jQuery插件slider实现拖动滑块选取价格范围
Apr 30 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
Sep 06 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
Aug 19 Javascript
React Native使用百度Echarts显示图表的示例代码
Nov 07 Javascript
vant 解决tab切换插件标题样式自定义的问题
Nov 13 Javascript
vue监听键盘事件的相关总结
Jan 29 Vue.js
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
JS 网站性能优化笔记
2011/05/24 PHP
使用php的HTTP请求的库Requests实现美女图片墙
2015/02/22 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
php中array_multisort对多维数组排序的方法
2020/06/21 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
2020/06/24 PHP
关于javascript 回调函数中变量作用域的讨论
2009/09/11 Javascript
javascript 进阶篇1 正则表达式,cookie管理,userData
2012/03/14 Javascript
解决js正则匹配换行问题实现代码
2012/12/10 Javascript
JavaScript自定义方法实现trim()、Ltrim()、Rtrim()的功能
2013/11/03 Javascript
子页向父页传值示例
2013/11/27 Javascript
解析Javascript中大括号“{}”的多义性
2013/12/02 Javascript
图片放大镜jquery.jqzoom.js使用实例附放大镜图标
2014/06/19 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
jQuery实现复选框批量选择与反选的方法
2015/06/17 Javascript
canvas 实现中国象棋
2017/02/17 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
2017/04/16 Javascript
vue 怎么创建组件及组件使用方法
2017/07/27 Javascript
Node.js中sequelize时区的配置方法
2017/12/10 Javascript
django使用channels2.x实现实时通讯
2018/11/28 Javascript
20道JS原理题助你面试一臂之力(必看)
2019/07/22 Javascript
python tensorflow学习之识别单张图片的实现的示例
2018/02/09 Python
Python3中列表list合并的四种方法
2019/04/19 Python
Django-Model数据库操作(增删改查、连表结构)详解
2019/07/17 Python
详解pandas中MultiIndex和对象实际索引不一致问题
2019/07/23 Python
介绍一下Python中webbrowser的用法
2013/05/07 面试题
《望洞庭》教学反思
2014/02/16 职场文书
工程师岗位职责规定
2014/02/26 职场文书
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
寄语是什么意思
2014/04/10 职场文书
小学美术兴趣小组活动总结
2014/07/07 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
学习党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
2014年教师教学工作总结
2014/11/08 职场文书
用Java实现简单计算器功能
2021/07/21 Java/Android
SpringBoot+Redis实现布隆过滤器的示例代码
2022/03/17 Java/Android