在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 相关文章推荐
在Node.js应用中读写Redis数据库的简单方法
Jun 30 Javascript
基于 Node.js 实现前后端分离
Apr 23 Javascript
微信小程序 for 循环详解
Oct 09 Javascript
JS出现失效的情况总结
Jan 20 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
Dec 01 Javascript
JavaScript设计模式之调停者模式实例详解
Feb 03 Javascript
React Component存在的几种形式详解
Nov 06 Javascript
js实现下拉框二级联动
Dec 04 Javascript
JSON基本语法及与JavaScript的异同实例分析
Jan 04 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
Feb 27 Javascript
详解vue2.0模拟后台json数据
May 16 Javascript
一文搞懂redux在react中的初步用法
Jun 09 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实现的装箱算法示例
2018/06/23 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
2020/12/16 PHP
网页自动跳转代码收集
2009/09/27 Javascript
模仿JQuery sortable效果 代码有错但值得看看
2009/11/05 Javascript
由JavaScript技术实现的web小游戏(不含网游)
2010/06/12 Javascript
基于jquery tab切换(防止页面刷新)
2012/05/23 Javascript
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
js通过元素class名字获取元素集合的具体实现
2014/01/06 Javascript
js导出txt示例代码
2014/01/14 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
JQuery EasyUI 数字格式化处理示例
2014/05/05 Javascript
原生javascript实现Tab选项卡切换功能
2015/01/12 Javascript
浅谈bootstrap源码分析之tab(选项卡)
2016/06/06 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
angular.js 路由及页面传参示例
2017/02/24 Javascript
bootstrap select插件封装成Vue2.0组件
2017/04/17 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
2018/02/24 jQuery
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
微信小程序功能之全屏滚动效果的实现代码
2018/11/22 Javascript
vue新建项目并配置标准路由过程解析
2019/12/09 Javascript
基于jsbarcode 生成条形码并将生成的条码保存至本地+源码
2020/04/27 Javascript
Python3处理文件中每个词的方法
2015/05/22 Python
解决python3读取Python2存储的pickle文件问题
2018/10/25 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
在OpenCV里使用Camshift算法的实现
2019/11/22 Python
Django解决frame拒绝问题的方法
2020/12/18 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
2020/12/22 Python
受外贸欢迎的美国主机:BlueHost
2017/05/16 全球购物
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书
法律进学校实施方案
2014/03/15 职场文书
电教室标语
2014/06/20 职场文书
小学生读书活动总结
2014/06/30 职场文书
感恩老师演讲稿400字
2014/08/28 职场文书
学校总务处领导班子民主生活会对照检查材料思想汇报
2014/09/27 职场文书
2015年度合同管理工作总结
2015/05/22 职场文书
总结Java对象被序列化的两种方法
2021/06/30 Java/Android