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 相关文章推荐
小议Function.apply() 之一------(函数的劫持与对象的复制)
Nov 30 Javascript
js 变量类型转换常用函数与代码[比较全]
Dec 01 Javascript
jQuery Validation PlugIn的使用方法详解
Dec 18 Javascript
模板视图和AngularJS之间冲突的解决方法
Nov 22 Javascript
Node.js的特点详解
Feb 03 Javascript
浅谈angularjs中响应回车事件
Apr 24 Javascript
Vue.js学习教程之列表渲染详解
May 17 Javascript
Vue中正确使用jQuery的方法
Oct 30 jQuery
Vue快速实现通用表单验证的方法
Feb 24 Javascript
vue2.0 解决抽取公用js的问题
Jul 31 Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
Aug 07 Javascript
JavaScript 中判断变量是否为数字的示例代码
Oct 22 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
php生成的html meta和link标记在body标签里 顶部有个空行
2010/05/18 PHP
PHP数组交集的优化代码分析
2011/03/06 PHP
php报表之jpgraph柱状图实例代码
2011/08/22 PHP
php的ajax简单实例
2014/02/27 PHP
ThinkPHP实现ajax仿官网搜索功能实例
2014/12/02 PHP
Thinkphp关闭缓存的方法
2015/06/26 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
2020/05/27 PHP
JS效率个人经验谈(8-15更新),加入range技巧
2007/01/09 Javascript
不懂JavaScript应该怎样学
2008/04/16 Javascript
JavaScript中变量声明有var和没var的区别示例介绍
2014/09/15 Javascript
jQuery的css() 方法使用指南
2015/05/03 Javascript
jQuery实现图像旋转动画效果
2016/05/29 Javascript
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
Vue.js递归组件实现组织架构树和选人功能案例分析
2019/07/03 Javascript
js点击事件的执行过程实例分析【冒泡与捕获】
2020/04/11 Javascript
深入浅析python中的多进程、多线程、协程
2016/06/22 Python
Python探索之ModelForm代码详解
2017/10/26 Python
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
浅析python中numpy包中的argsort函数的使用
2018/08/30 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
python读写csv文件方法详细总结
2019/07/05 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
基于Python爬取爱奇艺资源过程解析
2020/03/02 Python
美国户外运动商店:Sun & Ski
2018/08/23 全球购物
培训班主持词
2014/03/28 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书
小学教育见习报告
2014/10/31 职场文书
2015年外联部工作总结
2015/04/03 职场文书
2015社区精神文明建设工作总结
2015/04/21 职场文书
2015年教育实习工作总结
2015/04/24 职场文书
新娘婚礼致辞
2015/07/27 职场文书
2016年教代会开幕词
2016/03/04 职场文书
如何利用python创作字符画
2022/06/25 Python