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 相关文章推荐
JavaScript判断密码强度(自写代码)
Sep 06 Javascript
JavaScript定义类的几种方式总结
Jan 06 Javascript
javascript的BOM汇总
Jul 16 Javascript
JS实现环形进度条(从0到100%)效果
Jul 05 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
Sep 28 Javascript
JS验证不重复验证码
Feb 10 Javascript
Angular在一个页面中使用两个ng-app的方法
Feb 20 Javascript
JavaScript无阻塞加载和defer、async详解
Feb 26 Javascript
jQuery EasyUI Draggable拖动组件
Mar 01 Javascript
es6 filter() 数组过滤方法总结
Apr 03 Javascript
Node.js中console.log()输出彩色字体的方法示例
Dec 01 Javascript
原生js拖拽实现图形伸缩效果
Feb 10 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数组函数序列之array_splice() - 在数组任意位置插入元素
2011/11/07 PHP
使用PHP下载CSS文件中的图片的代码
2013/09/24 PHP
浅析php工厂模式
2014/11/25 PHP
php实现的http请求封装示例
2016/11/08 PHP
ThinkPHP 模板substr的截取字符串函数详解
2017/01/09 PHP
PHP全功能无变形图片裁剪操作类与用法示例
2017/01/10 PHP
JS target与currentTarget区别说明
2011/08/28 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
2013/05/07 Javascript
js实现日期级联效果
2014/01/23 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
javascript在当前窗口关闭前检测窗口是否关闭
2014/09/29 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
实例代码详解jquery.slides.js
2015/11/16 Javascript
原生JS实现几个常用DOM操作API实例
2017/01/19 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
2017/11/10 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
vue 设置 input 为不可以编辑的实现方法
2019/09/19 Javascript
react 原生实现头像滚动播放的示例
2020/04/21 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
Python3.4实现远程控制电脑开关机
2018/02/22 Python
python属于解释型语言么
2020/06/15 Python
用React加CSS3实现微信拆红包动画效果
2017/03/13 HTML / CSS
亿企通软件测试面试题
2012/04/10 面试题
出国留学介绍信
2014/01/13 职场文书
小学毕业感言150字
2014/02/05 职场文书
英语老师推荐信
2014/02/26 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
关爱老人标语
2014/06/21 职场文书
农村文化建设标语
2014/10/07 职场文书
2014年租房协议书范本
2014/10/30 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle
解析MySQL binlog
2021/06/11 MySQL
Java 超详细讲解设计模式之中的抽象工厂模式
2022/03/25 Java/Android