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 IFrame 强制刷新代码
Jul 23 Javascript
asp(javascript)全角半角转换代码 dbc2sbc
Aug 06 Javascript
jquery.cvtooltip.js 基于jquery的气泡提示插件
Nov 19 Javascript
JS中for循序中延迟加载动态效果的具体实现
Aug 18 Javascript
Jquery如何实现点击时高亮显示代码
Jan 22 Javascript
Node.js中child_process实现多进程
Feb 03 Javascript
总结JavaScript设计模式编程中的享元模式使用
May 21 Javascript
jQuery表单事件实例代码分享
Aug 18 Javascript
js实现上传图片预览方法
Oct 25 Javascript
jQuery常见面试题之DOM操作详析
Jul 05 jQuery
VUE 3D轮播图封装实现方法
Jul 03 Javascript
vue相关配置文件详解及多环境配置详细步骤
May 19 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
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
2014/07/28 PHP
Laravel第三方包报class not found的解决方法
2019/10/13 PHP
Javascript - HTML的request类
2007/01/09 Javascript
JavaScript中for-in遍历方式示例介绍
2014/02/11 Javascript
jQuery下拉美化搜索表单效果代码分享
2015/08/25 Javascript
KnockoutJS 3.X API 第四章之数据控制流with绑定
2016/10/10 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
jQuery实现手机上输入后隐藏键盘功能
2017/01/04 Javascript
bootstrap中的 form表单属性role=&quot;form&quot;的作用详解
2017/01/20 Javascript
Node.js数据库操作之查询MySQL数据库(二)
2017/03/04 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
Vue优化:常见会导致内存泄漏问题及优化详解
2020/08/04 Javascript
jQuery zTree如何改变指定节点文本样式
2020/10/16 jQuery
Python 读写文件和file对象的方法(推荐)
2016/09/12 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
Python并行分布式框架Celery详解
2018/10/15 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
python中的列表和元组区别分析
2020/12/30 Python
HTML5移动端开发遇见的东西
2019/10/11 HTML / CSS
定制iPhone和Macbook保护壳:Slick Case
2018/11/21 全球购物
NET程序员上机面试题
2015/05/23 面试题
广州某公司软件工程师面试题
2014/12/22 面试题
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
吨的认识教学反思
2014/04/27 职场文书
班级年度安全计划书
2014/05/01 职场文书
2014幼儿园小班工作总结
2014/11/10 职场文书
爱晚亭导游词
2015/02/09 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书
52条SQL语句教你性能优化
2021/05/25 MySQL
深入解析NumPy中的Broadcasting广播机制
2021/05/30 Python
vue项目如何打包之项目打包优化(让打包的js文件变小)
2022/04/30 Vue.js
windows系统安装配置nginx环境
2022/06/28 Servers