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 相关文章推荐
jQuery select控制插件
Aug 17 Javascript
javascript延时加载之defer测试
Dec 28 Javascript
node.js中的fs.writeFileSync方法使用说明
Dec 14 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
Apr 15 Javascript
JS简单设置下拉选择框默认值的方法
Aug 20 Javascript
使用vue实现点击按钮滑出面板的实现代码
Jan 10 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
Feb 13 Javascript
vue.js默认路由不加载linkActiveClass问题的解决方法
Dec 11 Javascript
vue源码nextTick使用及原理解析
Aug 13 Javascript
javascript之分片上传,断点续传的实际项目实现详解
Sep 05 Javascript
element el-table表格的二次封装实现(附表格高度自适应)
Jan 19 Javascript
LayUI+Shiro实现动态菜单并记住菜单收展的示例
May 06 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 explode()函数用法、切分字符串
2012/10/03 PHP
php中使用websocket详解
2016/09/23 PHP
javascript URL编码和解码使用说明
2010/04/12 Javascript
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
2010/09/10 Javascript
中文字符串截取的js函数代码
2013/04/17 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
JavaScript异步回调的Promise模式封装实例
2014/06/07 Javascript
JQuery EasyUI 加载两次url的原因分析及解决方案
2014/08/18 Javascript
jQuery 复合选择器应用的几个例子
2014/09/11 Javascript
JavaScript中的alert()函数使用技巧详解
2014/12/29 Javascript
JavaScript中的small()方法使用详解
2015/06/08 Javascript
AngularJS基础 ng-repeat 指令简单示例
2016/08/03 Javascript
Bootstrap的基本应用要点浅析
2016/12/19 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
2017/07/10 Javascript
JS页面获取 session 值,作用域和闭包学习笔记
2019/10/16 Javascript
node读写Excel操作实例分析
2019/11/06 Javascript
《Python之禅》中对于Python编程过程中的一些建议
2015/04/03 Python
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
python matplotlib实现双Y轴的实例
2019/02/12 Python
使用Python实现正态分布、正态分布采样
2019/11/20 Python
Python Numpy 控制台完全输出ndarray的实现
2020/02/19 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
2020/04/22 Python
PyCharm中如何直接使用Anaconda已安装的库
2020/05/28 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
2020/07/07 Python
python中random.randint和random.randrange的区别详解
2020/09/20 Python
美国在线家居装饰店:Belle&June
2018/10/24 全球购物
美国在线纱线商店:Darn Good Yarn
2019/03/20 全球购物
男女钓鱼靴和甲板鞋:XTRATUF
2021/01/09 全球购物
四川internet信息高速公路(C#)笔试题
2012/02/29 面试题
健康家庭事迹材料
2014/05/02 职场文书
党员群众路线教育实践活动学习笔记
2014/11/05 职场文书
终止劳动合同证明书样本
2014/11/19 职场文书
《有余数的除法》教学反思
2016/02/22 职场文书
OpenCV实现普通阈值
2021/11/17 Java/Android
CSS使用伪类控制边框长度的方法
2022/01/18 HTML / CSS