在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实现触发时更新下拉列表内容的方法
Dec 02 Javascript
JavaScript常用判断写法大全(推荐)
May 30 Javascript
jQuery简单实现仿京东分类导航层效果
Jun 07 Javascript
手机Web APP如何实现分享多平台功能
Aug 19 Javascript
原生javascript实现图片放大镜效果
Jan 18 Javascript
jQuery学习之DOM节点的插入方法总结
Jan 22 Javascript
利用node.js本地搭建HTTP服务器
Apr 19 Javascript
搭建基于express框架运行环境的方法步骤
Nov 15 Javascript
ES6 Set结构的应用实例分析
Jun 26 Javascript
Laravel admin实现消息提醒、播放音频功能
Jul 10 Javascript
js实现直播点击飘心效果
Aug 19 Javascript
Openlayers3实现车辆轨迹回放功能
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
php记录日志的实现代码
2011/08/08 PHP
ThinkPHP中自定义错误页面和提示页面实例
2014/11/22 PHP
PHP中Enum(枚举)用法实例详解
2015/12/07 PHP
PHP表单验证内容是否为空的实现代码
2016/11/14 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
PHP使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
chrome浏览器不支持onmouseleave事件的解决技巧
2013/05/31 Javascript
jQuery中多个元素的Hover事件解决方案
2014/06/12 Javascript
jQuery数据缓存用法分析
2015/02/20 Javascript
基于javascript实现窗口抖动效果
2016/01/03 Javascript
vue-cli如何引入bootstrap工具的方法
2017/10/19 Javascript
在nginx上部署vue项目(history模式)的方法
2017/12/28 Javascript
node.js使用免费的阿里云ip查询获取ip所在地【推荐】
2018/09/03 Javascript
微信小程序中如何计算距离某个节日还有多少天
2019/07/15 Javascript
javascript执行上下文、变量对象实例分析
2020/04/25 Javascript
angula中使用iframe点击后不执行变更检测的问题
2020/05/10 Javascript
[01:07:19]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第一场
2018/04/06 DOTA
python比较2个xml内容的方法
2015/05/11 Python
简单谈谈Python中函数的可变参数
2016/09/02 Python
谈谈Python中的while循环语句
2019/03/10 Python
python多线程共享变量的使用和效率方法
2019/07/16 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
Django:使用filter的pk进行多值查询操作
2020/07/15 Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
2020/11/05 Python
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
CSS3实现图片抽屉式效果的示例代码
2019/11/06 HTML / CSS
HTML5 canvas基本绘图之绘制矩形
2016/06/27 HTML / CSS
用HTML5.0制作网页的教程
2010/05/30 HTML / CSS
Interhome丹麦:在线预订度假屋和公寓
2019/07/18 全球购物
好的自荐信包括什么内容
2013/11/07 职场文书
《自然之道》教学反思
2014/02/11 职场文书
分家协议书
2014/04/21 职场文书
大专应届毕业生求职信
2014/07/15 职场文书
2019大学生实习报告
2019/06/21 职场文书
Go语言grpc和protobuf
2022/04/13 Golang