在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 相关文章推荐
Javascript valueOf 使用方法
Dec 28 Javascript
jquery下操作HTML控件的实现代码
Jan 12 Javascript
分享JavaScript获取网页关闭与取消关闭的事件
Dec 13 Javascript
js实现表单检测及表单提示的方法
Aug 14 Javascript
Vue.js动态添加、删除选题的实例代码
Sep 30 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
Oct 11 Javascript
this.$toast() 了解一下?
Apr 18 Javascript
Vue修改项目启动端口号方法
Nov 07 Javascript
jquery ajax 请求小技巧实例分析
Nov 11 jQuery
jQuery实现小火箭返回顶部特效
Feb 03 jQuery
vue实现点击按钮切换背景颜色的示例代码
Jun 23 Javascript
原生js实现表格翻页和跳转
Sep 29 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
世界收音机发展史
2021/03/01 无线电
php 无限级数据JSON格式及JS解析
2010/07/17 PHP
php pki加密技术(openssl)详解
2013/07/01 PHP
php cli配置文件问题分析
2015/10/15 PHP
php+ajax实现无刷新数据分页的办法
2015/11/02 PHP
php使用ffmpeg获取视频信息并截图的实现方法
2016/05/03 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
2017/04/20 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
2019/09/09 PHP
javascript 单例/单体模式(Singleton)
2011/04/07 Javascript
js控制当再次点击按钮时的间隔时间
2014/06/03 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
使用Browserify配合jQuery进行编程的超级指南
2015/07/28 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
js实现有过渡渐变效果的图片轮播相册(兼容IE,ff)
2016/01/19 Javascript
jQuery 中的 DOM 操作
2016/04/26 Javascript
JQueryEasyUI之DataGrid数据显示
2016/11/23 Javascript
VUE饿了么树形控件添加增删改功能的示例代码
2017/10/17 Javascript
微信小程序解除10个请求并发限制
2018/12/18 Javascript
vue实现节点增删改功能
2019/09/26 Javascript
[51:22]Fnatic vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
python pygame实现挡板弹球游戏
2019/11/25 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
使用CSS3来制作消息提醒框
2015/07/12 HTML / CSS
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
C++的几个面试题附答案
2016/08/03 面试题
高中体育教学反思
2014/01/24 职场文书
聘任书的写作格式及范文
2014/03/29 职场文书
补充协议书范本
2014/04/23 职场文书
财务管理专业求职信
2014/06/11 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
捐助倡议书
2015/01/19 职场文书
公证书格式
2015/01/23 职场文书
劳动仲裁代理词范文
2015/05/25 职场文书
2015中学政教处工作总结
2015/07/22 职场文书