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 相关文章推荐
jQuery1.6 使用方法二
Nov 23 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
Apr 17 Javascript
jQuery对Select的操作大集合(收藏)
Dec 28 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
Jan 09 Javascript
小结Node.js中非阻塞IO和事件循环
Sep 18 Javascript
JavaScript队列、优先队列与循环队列
Nov 14 Javascript
bootstrap配合Masonry插件实现瀑布式布局
Jan 18 Javascript
原生js实现可拖动的登录框效果
Jan 21 Javascript
jQuery实现动态添加、删除按钮及input输入框的方法
Apr 27 jQuery
JavaScript中arguments和this对象用法分析
Aug 08 Javascript
Vue 全家桶实现移动端酷狗音乐功能
Nov 16 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
Apr 28 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作的文本留言本的例子(一)
2006/10/09 PHP
Discuz! Passport 通行证整合
2008/03/27 PHP
php从csv文件读取数据并输出到网页的方法
2015/03/14 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
js检测客户端不是firefox则提示下载
2007/04/07 Javascript
漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)
2007/04/27 Javascript
类似CSDN图片切换效果脚本
2009/09/17 Javascript
JavaScript中的prototype使用说明
2010/04/13 Javascript
前端开发的开始---基于面向对象的Ajax类
2010/09/17 Javascript
JS代码优化技巧之通俗版(减少js体积)
2011/12/23 Javascript
jQuery在html有效在jsp无效的原因及解决方法
2013/08/02 Javascript
Jquery 跨域访问 Lightswitch OData Service的方法
2013/09/11 Javascript
JavaScript二维数组实现的省市联动菜单
2014/05/08 Javascript
js中的关联数组与普通数组详解
2016/07/27 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
js实现获取鼠标当前的位置
2016/12/14 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
JavaScript实现二维坐标点排序效果
2017/07/18 Javascript
解决使用vue.js路由后失效的问题
2018/03/17 Javascript
去掉vue 中的代码规范检测两种方法(Eslint验证)
2018/03/21 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
vue.js配合$.post从后台获取数据简单demo分享
2018/08/11 Javascript
Vue.js标签页组件使用方法详解
2019/10/19 Javascript
详解React 元素渲染
2020/07/07 Javascript
Python文件及目录操作实例详解
2015/06/04 Python
python urllib爬取百度云连接的实例代码
2017/06/19 Python
python3操作微信itchat实现发送图片
2018/02/24 Python
在tensorflow中实现屏蔽输出的log信息
2020/02/04 Python
Python使用socket模块实现简单tcp通信
2020/08/18 Python
python实现邮件循环自动发件功能
2020/09/11 Python
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
英语自荐信范文
2013/12/11 职场文书
银行类自荐信
2014/02/04 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
python运行脚本文件的三种方法实例
2022/06/25 Python
Win11控制面板快捷键是什么?Win11打开控制面板的方法汇总
2022/07/07 数码科技