vue2实现数据请求显示loading图


Posted in Javascript onNovember 28, 2017

一般项目中,有时候会要求,你在数据请求的时候显示一张gif图片,然后数据加载完后,消失。这个,一般只需要在封装的axios中写入js事件即可。当然,我们首先需要在app.vue中,加入此图片。如下:

<template>
 <div id="app">
 <loading v-show="fetchLoading"></loading>
 <router-view></router-view>
 </div>
</template>

<script>
 import { mapGetters } from 'vuex';
 import Loading from './components/common/loading';

 export default {
 name: 'app',
 data() {
 return {
 }
 },
 computed: {
 ...mapGetters([
 'fetchLoading',
 ]),
 },
 components: {
 Loading,
 }
 }
</script>

<style>
 #app{
 width: 100%;
 height: 100%;
 }
</style>

这里的fetchLoading是存在vuex里面的一个变量。在store/modules/common.js里需要如下定义:

/* 此js文件用于存储公用的vuex状态 */
import api from './../../fetch/api'
import * as types from './../types.js'
const state = {
 // 请求数据时加载状态loading
 fetchLoading: false
}
const getters = {
 // 请求数据时加载状态
 fetchLoading: state => state.fetchLoading
}
const actions = {
 // 请求数据时状态loading
 FETCH_LOADING({
 commit
 }, res) {
 commit(types.FETCH_LOADING, res)
 },
}
const mutations = {
 // 请求数据时loading
 [types.FETCH_LOADING] (state, res) {
 state.fetchLoading = res
 }
}

loading组件如下:

<template>
 <div class="loading">
 <img src="./../../assets/main/running.gif" alt="">
 </div>
</template>

<script>
 export default {
 name: 'loading',
 data () {
 return {}
 },
 }
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
 .loading{
 position: fixed;
 top:0;
 left:0;
 z-index:121;
 width: 100%;
 height: 100%;
 background: rgba(0,0,0,0.3);
 display: table-cell;
 vertical-align: middle;
 text-align: center;
 }
 .loading img{
 margin:5rem auto;
 }
</style>

最后在fetch/api.js里封装的axios里写入判断loading事件即可:如下

// axios的请求时间
let axiosDate = new Date()
export function fetch (url, params) {
 return new Promise((resolve, reject) => {
 axios.post(url, params)
 .then(response => {
 // 关闭 loading图片消失
 let oDate = new Date()
 let time = oDate.getTime() - axiosDate.getTime()
 if (time < 500) time = 500
 setTimeout(() => {
  store.dispatch('FETCH_LOADING', false)
 }, time)
 resolve(response.data)
 })
 .catch((error) => {
 // 关闭 loading图片消失
 store.dispatch('FETCH_LOADING', false)
 axiosDate = new Date()
 reject(error)
 })
 })
}
export default {
 // 组件中公共页面请求函数
 commonApi (url, params) {
 if(stringQuery(window.location.href)) {
 store.dispatch('FETCH_LOADING', true);
 }
 axiosDate = new Date();
 return fetch(url, params);
 }
}

这样就实现了,项目中当加载数据的时候,显示gif图片,当数据加载出来时消失。

关于vue.js的学习教程,请大家点击专题vue.js组件学习教程、Vue.js前端组件学习教程进行学习。

更多vue学习教程请阅读专题《vue实战教程》

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

Javascript 相关文章推荐
19个很有用的 JavaScript库推荐
Jun 27 Javascript
jQuery中$.fn的用法示例介绍
Nov 05 Javascript
JavaScript模拟实现继承的方法
Mar 30 Javascript
JS如何判断json是否为空
Jul 06 Javascript
BootStrap Table 获取同行不同列元素的方法
Dec 19 Javascript
HTML页面定时跳转方法解析(2种任选)
Dec 22 Javascript
vue绑定class与行间样式style详解
Aug 16 Javascript
vue刷新和tab切换实例
Feb 11 Javascript
Javascript读取上传文件内容/类型/字节数
Apr 30 Javascript
微信小程序轮播图swiper代码详解
Dec 01 Javascript
vue使用element-ui实现表单验证
Dec 13 Vue.js
如何用JavaScript学习算法复杂度
Apr 30 Javascript
Vue2仿淘宝实现省市区三级联动
Apr 15 #Javascript
ligerUI---ListBox(列表框可移动的实例)
Nov 28 #Javascript
基于vue2实现上拉加载功能
Nov 28 #Javascript
微信小程序模板和模块化用法实例分析
Nov 28 #Javascript
基于Vue的移动端图片裁剪组件功能
Nov 28 #Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
Nov 28 #Javascript
基于Vue框架vux组件库实现上拉刷新功能
Nov 28 #Javascript
You might like
DISCUZ 论坛管理员密码忘记的解决方法
2009/05/14 PHP
PHP计划任务之关闭浏览器后仍然继续执行的函数
2010/07/22 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
2013/11/26 PHP
简单了解WordPress开发中update_option()函数的用法
2016/01/11 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
2016/02/26 PHP
php微信浏览器分享设置以及回调详解
2016/08/01 PHP
Thinkphp5+uploadify实现的文件上传功能示例
2018/05/26 PHP
js注意img图片的onerror事件的分析
2011/01/01 Javascript
js日期、星座的级联显示代码
2014/01/23 Javascript
js 弹出新页面避免被浏览器、ad拦截的一种新方法
2014/04/30 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
Markdown+Bootstrap图片自适应属性详解
2016/05/21 Javascript
用jQuery实现圆点图片轮播效果
2017/03/19 Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
2017/06/02 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
微信小程序实现倒计时补零功能
2018/07/09 Javascript
Angular实现svg和png图片下载实现
2019/05/05 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
2019/12/17 Javascript
vue+elementui实现点击table中的单元格触发事件--弹框
2020/07/18 Javascript
js动态添加带圆圈序号列表的实例代码
2021/02/18 Javascript
Python获取邮件地址的方法
2015/07/10 Python
Python 通配符删除文件的实例
2018/04/24 Python
TensorFlow Session会话控制&amp;Variable变量详解
2018/07/30 Python
python selenium爬取斗鱼所有直播房间信息过程详解
2019/08/09 Python
Django web自定义通用权限控制实现方法
2020/11/24 Python
四年大学自我鉴定
2014/02/17 职场文书
工伤赔偿协议书
2014/04/15 职场文书
《乡下孩子》教学反思
2014/04/17 职场文书
小学假期安全广播稿
2014/09/28 职场文书
租房协议书范例
2014/10/14 职场文书
2014年环境整治工作总结
2014/12/10 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
南湾猴岛导游词
2015/02/09 职场文书
2016年记者节感言
2015/12/08 职场文书
2016基督教会圣诞节开幕词
2016/03/04 职场文书
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python