在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在页面中添加和除移DOM示例代码
Jun 24 Javascript
javascript使用正则获取url上的某个参数
Sep 04 Javascript
使用纯javascript实现放大镜效果
Mar 18 Javascript
详解Bootstrap四种图片样式
Jan 04 Javascript
Angularjs---项目搭建图文教程
Jul 08 Javascript
总结Javascript中数组各种去重的方法
Oct 04 Javascript
用headjs来管理和加载js 提高网站加载速度
Nov 29 Javascript
JavaScript获取URL参数的方法之一
Mar 24 Javascript
原生JS实现图片无缝滚动方法(附带封装的运动框架)
Oct 01 Javascript
最实用的JS数组函数整理
Dec 05 Javascript
JavaScript 禁止用户保存图片的实现代码
Apr 28 Javascript
原生js实现日期选择插件
May 21 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反射使用实例和PHP反射API的中文说明
2014/07/02 PHP
Laravel 5 框架入门(三)
2015/04/09 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
2016/09/11 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
JS特权方法定义作用以及与公有方法的区别
2013/03/18 Javascript
js Array对象的扩展函数代码
2013/04/24 Javascript
JS拖拽插件实现步骤
2015/08/03 Javascript
js调出上下文菜单的实例
2015/12/17 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
基于jQuery实现的查看全文功能【实用】
2016/12/11 Javascript
Vue实现动态显示textarea剩余字数
2017/05/22 Javascript
JS实现json的序列化和反序列化功能示例
2017/06/13 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
纯js代码生成可搜索选择下拉列表的实例
2018/01/11 Javascript
js数据类型检测总结
2018/08/05 Javascript
JS实现选项卡效果的代码实例
2019/05/20 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
2019/10/26 Javascript
一分钟学会JavaScript中的try-catch
2020/12/14 Javascript
Vue实现指令式动态追加小球动画组件的步骤
2020/12/18 Vue.js
状态机的概念和在Python下使用状态机的教程
2015/04/11 Python
python实现时间o(1)的最小栈的实例代码
2018/07/23 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
python SQLAlchemy 中的Engine详解
2019/07/04 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
Python应用实现处理excel数据过程解析
2020/06/19 Python
Python pymsql模块的使用
2020/09/07 Python
如何用H5实现一个触屏版的轮播器的实例
2017/01/09 HTML / CSS
美国求婚钻戒网站:Super Jeweler
2016/08/27 全球购物
Shell如何接收变量输入
2016/08/06 面试题
本科生个人求职自荐信
2013/09/26 职场文书
优秀干部获奖感言
2014/01/31 职场文书
个人自我评价范文
2014/02/05 职场文书
莫言诺贝尔获奖演讲稿
2014/05/21 职场文书
物资采购方案
2014/06/12 职场文书
中职生自荐信范文
2014/06/15 职场文书
Pandas数据结构之Series的使用
2022/03/31 Python