在vue中通过axios异步使用echarts的方法


Posted in Javascript onJanuary 13, 2018

现实的工作中, 数据不可能是像之前的demo演示的那样把数据写死的. 所有的数据都应该通过发送请求进行获取, 所以, 这篇文章, 我将在Vue项目中使用Echarts: 在Vue中引入Echarts中的数据提取出来, 放入到static/data.json文件中,请求该文件获取数据。

一、 实现异步加载数据

(一)引入vue-resource

通过npm下载axios

//命令行中输入
npm install axios --save

在main.js中引入axios并注册

// main.js
import http from './http'
Vue.prototype.$http = http //挂载到原型上

(二)设置data.json

将该柱状图的没有数据的option抽取到data.json中, 代码如下:

{
 "title": { "text": "简单饼状图" },
 "tooltip": {},
 "xAxis": {
  "data": ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"],
  "name": "产品"
 },
 "yAxis": {},
 "series": [{
  "name": "销量",
  "type": "bar",
  "data": [5, 20, 36, 10, 10, 20],
  "itemStyle": { 
   "normal": {
    "color": "hotpink"
   }
  }
 }]
}

(三)在async-bar-chart.vue中请求数据

  1. 从aysnc-barChart-option.js中引入option
  2. 在methods中添加drawBarChart()方法
  3. 在mounted()钩子函数中调用drawBarChart()

代码如下:

<template>
 <div id="myChart" :style="{width: '800px', height: '400px'}"></div>
</template>

<script>
 export default {
 name: 'echarts',
 data() {
  return {
  msg: 'Welcome to Your Vue.js App',
  goods: {}
  }
 },
 mounted() {
  this.drawLine();
 },
 created() {
  this.$http.get('./static/dat.json').then(res => {
  const data = res.data;
  this.goods = data
  console.log(this.goods);
  console.log(Array.from(this.goods.xAxis.data));
  })
 },
 methods: {
  drawLine() {
  // 基于准备好的dom,初始化echarts实例
  let myChart = this.$echarts.init(document.getElementById('myChart'))
  // 绘制图表
  myChart.setOption({
   title: {}, //{text: '异步数据加载示例'},
   tooltip: {},
   xAxis: {
   data: [] //["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
   },
   yAxis: {},
   series: [{
   name: '销量',
   type: 'bar',
   data: [] //[5, 20, 36, 10, 10, 20]
   }]
  });
  this.$http.get("./static/dat.json") .then((res) => {
   const data = res.data;
   const list = data.series.map(good=>{
     let list = good.data;
     return [...list]
    })
    console.log(list);
    console.log(Array.from(...list));
   myChart.setOption({
    title: data.title,
    xAxis: [{
    data: data.xAxis.data
    }],
    series: [{
    name: '销量',
    type: 'bar',
    data: Array.from(...list) //[5, 20, 36, 10, 10, 20]
    }]
   });
   })
  }
 }
 }
</script>

在vue中通过axios异步使用echarts的方法

二. 添加加载动画

如果数据加载时间较长,一个空的坐标轴放在画布上也会让用户觉得是不是产生 bug 了,因此需要一个 loading 的动画来提示用户数据正在加载。

ECharts 默认有提供了一个简单的加载动画。只需要调用 showLoading 方法显示。数据加载完成后再调用 hideLoading 方法隐藏加载动画。

在drawLine()方法中添加showLoading()和hideLoading(), 代码如下:

methods: {
  drawLine() {
  // 基于准备好的dom,初始化echarts实例
  let myChart = this.$echarts.init(document.getElementById('myChart'))
  // 绘制图表
  myChart.setOption({
   title: {}, //{text: '异步数据加载示例'},
   tooltip: {},
   xAxis: {
   data: [] //["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
   },
   yAxis: {},
   series: [{
   name: '销量',
   type: 'bar',
   data: [] //[5, 20, 36, 10, 10, 20]
   }]
  });
  //显示加载动画
  myChart.showLoading();

  this.$http.get("./static/dat.json").then((res) => {
   setTimeout(() => { //未来让加载动画效果明显,这里加入了setTimeout,实现3s延时
   const data = res.data;
   const list = data.series.map(good => {
    let list = good.data;
    return [...list]
   })
   console.log(list);
   console.log(Array.from(...list));
   myChart.hideLoading(); //隐藏加载动画
   myChart.setOption({
    title: data.title,
    xAxis: [{
    data: data.xAxis.data
    }],
    series: [{
    name: '销量',
    type: 'bar',
    data: Array.from(...list) //[5, 20, 36, 10, 10, 20]
    }]
   });
   }, 3000)
  })
  }
 }

在vue中通过axios异步使用echarts的方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
分享一款基于jQuery的视频播放插件
Oct 09 Javascript
node.js中的fs.readSync方法使用说明
Dec 17 Javascript
jQuery源码解读之addClass()方法分析
Feb 20 Javascript
JavaScript中String.match()方法的使用详解
Jun 06 Javascript
JQuery实现简单的图片滑动切换特效
Nov 22 Javascript
JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
Jan 12 Javascript
Bootstrap 附加导航(Affix)插件实例详解
Jun 01 Javascript
jquery判断对象是否为空并遍历对象的简单实例
Jul 26 Javascript
Node.js查找当前目录下文件夹实例代码
Mar 07 Javascript
js+canvas实现滑动拼图验证码功能
Mar 26 Javascript
JS二级菜单不同实现方法分析【4种方法】
Dec 21 Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
Jul 15 Javascript
详解基于vue-cli配置移动端自适应
Jan 13 #Javascript
javascript用rem来做响应式开发
Jan 13 #Javascript
深入理解ES6之数据解构的用法
Jan 13 #Javascript
详解ES6语法之可迭代协议和迭代器协议
Jan 13 #Javascript
详解如何在React组件“外”使用父组件的Props
Jan 12 #Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
Jan 12 #Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
Jan 12 #Javascript
You might like
模仿OSO的论坛(四)
2006/10/09 PHP
php判断GIF图片是否为动画的方法
2020/09/04 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
PHP+Mysql+jQuery中国地图区域数据统计实例讲解
2015/10/10 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
详解php中反射的应用
2016/03/15 PHP
PHP正则获取页面所有图片地址
2016/03/23 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
yii2中关于加密解密的那些事儿
2018/06/12 PHP
jQuery $.each的用法说明
2010/03/22 Javascript
jQuery中add实现同时选择两个id对象
2010/10/22 Javascript
用js正确判断用户名cookie是否存在的方法
2014/01/28 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
在Linux系统中搭建Node.js开发环境的简单步骤讲解
2016/01/26 Javascript
Bootstrap表单布局样式代码
2016/05/31 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
浅谈键盘上回车按钮的js触发事件
2017/02/13 Javascript
微信小程序 密码输入(源码下载)
2017/06/27 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
2019/04/12 Javascript
python调用windows api锁定计算机示例
2014/04/17 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
2018/05/26 Python
python列表list保留顺序去重的实例
2018/12/14 Python
python中字符串数组逆序排列方法总结
2019/06/23 Python
python数组循环处理方法
2019/08/26 Python
利用PyQt中的QThread类实现多线程
2020/02/18 Python
python 在threading中如何处理主进程和子线程的关系
2020/04/25 Python
python urllib和urllib3知识点总结
2021/02/08 Python
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
养殖行业的创业计划书
2014/01/05 职场文书
茶叶店创业计划书范文
2014/01/19 职场文书
2014年清明节寄语
2014/04/03 职场文书
收款委托书范本
2014/09/11 职场文书
2014年初级职称工作总结
2014/12/08 职场文书
世界名著读书笔记
2015/06/25 职场文书
幼儿园教师管理制度
2015/08/05 职场文书