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 相关文章推荐
prototype Element学习笔记(Element篇三)
Oct 26 Javascript
JS动态增加删除UL节点LI及相关内容示例
May 21 Javascript
Window.Open如何在同一个标签页打开
Jun 20 Javascript
微信小程序 数据封装,参数传值等经验分享
Jan 09 Javascript
深入理解node.js之path模块
May 03 Javascript
详解angular分页插件tm.pagination二次触发问题解决方案
Jul 20 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
Aug 14 Javascript
解决layui table表单提示数据接口请求异常的问题
Sep 24 Javascript
微信小程序如何实现radio单选框单击打勾和取消
Jan 21 Javascript
jquery实现垂直手风琴菜单
Mar 04 jQuery
JQuery省市联动效果实现过程详解
May 08 jQuery
vue3.0封装轮播图组件的步骤
Mar 04 Vue.js
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
thinkPHP利用ajax异步上传图片并显示、删除的示例
2018/09/26 PHP
php文件包含的几种方式总结
2019/09/19 PHP
破除网页鼠标右键被禁用的绝招大全
2006/12/27 Javascript
火狐4、谷歌12不支持Jquery Validator的解决方法分享
2011/06/20 Javascript
Fixie.js 自动填充内容的插件
2012/06/28 Javascript
基于jquery的文章中所有图片width大小批量设置方法
2013/08/01 Javascript
jQuery的live()方法对hover事件的处理示例
2014/02/27 Javascript
jQuery中 delegate使用的问题
2015/07/03 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
js自调用匿名函数的三种写法(推荐)
2016/08/19 Javascript
jQuery实现边框动态效果的实例代码
2016/09/23 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
2016/11/01 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
详解原生js实现offset方法
2017/06/15 Javascript
基于 Vue.js 之 iView UI 框架非工程化实践记录(推荐)
2017/11/21 Javascript
JavaScript实现AOP详解(面向切面编程,装饰者模式)
2017/12/19 Javascript
jQuery中将json数据显示到页面表格的方法
2018/05/27 jQuery
react+ant design实现Table的增、删、改的示例代码
2018/12/27 Javascript
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
[01:11:48]Fnatic vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
centos6.7安装python2.7.11的具体方法
2017/01/16 Python
python互斥锁、加锁、同步机制、异步通信知识总结
2018/02/11 Python
python实现自动登录后台管理系统
2018/10/18 Python
Python中函数的返回值示例浅析
2019/08/28 Python
python退出循环的方法
2020/06/18 Python
使用Keras实现Tensor的相乘和相加代码
2020/06/18 Python
html5实现完美兼容各大浏览器的播放器
2014/12/26 HTML / CSS
Html5自定义字体解决方法
2019/10/09 HTML / CSS
内刊编辑求职自荐书范文
2014/02/19 职场文书
事务机电主管工作职责
2014/02/25 职场文书
农民工预备党员思想汇报
2014/09/14 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
旅行社计调工作总结
2015/08/12 职场文书
高中化学教学反思
2016/02/22 职场文书
实习员工转正的评语汇总,以备不时之需
2019/12/17 职场文书