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 相关文章推荐
img标签中onerror用法
Aug 13 Javascript
jQuery技巧大放送 学习jquery的朋友可以看下
Oct 14 Javascript
扩展jquery实现客户端表格的分页、排序功能代码
Mar 16 Javascript
JavaScript将Web页面内容导出到Word及Excel的方法
Feb 13 Javascript
js防阻塞加载的实现方法
Sep 09 Javascript
JQuery控制DIV的选取实现方法
Sep 18 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
Dec 15 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
Jan 19 Javascript
详解Javascript几种跨域方式总结
Feb 27 Javascript
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
Sep 20 jQuery
Vue引用Swiper4插件无法重写分页器样式的解决方法
Sep 27 Javascript
Swiper实现导航栏滚动效果
Oct 16 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的一个登录的类 [推荐]
2007/03/16 PHP
php checkbox复选框值的获取与checkbox默认值输出方法
2010/05/15 PHP
php 目录与文件处理-郑阿奇(续)
2011/07/04 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
在Nginx上部署ThinkPHP项目教程
2015/02/02 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
2019/02/15 PHP
js去除重复字符串两种实现方法
2013/01/09 Javascript
JavaScript常用小技巧小结
2014/12/29 Javascript
JavaScript中用let语句声明作用域的用法讲解
2016/05/20 Javascript
js HTML5 Canvas绘制转盘抽奖
2020/09/13 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
vue的全局提示框组件实例代码
2018/02/26 Javascript
浅谈FastClick 填坑及源码解析
2018/03/02 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
2020/07/20 Javascript
openlayers实现图标拖动获取坐标
2020/09/25 Javascript
Django 多语言教程的实现(i18n)
2018/07/07 Python
六行python代码的爱心曲线详解
2019/05/17 Python
Django框架基础模板标签与filter使用方法详解
2019/07/23 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
Python CategoricalDtype自定义排序实现原理解析
2020/09/11 Python
CSS3 仿微信聊天小气泡实例代码
2017/04/05 HTML / CSS
HTML5实现一个能够移动的小坦克示例代码
2013/09/02 HTML / CSS
浅析HTML5:'data-'属性的作用
2018/01/23 HTML / CSS
美国专业级皮肤病和spa品质护肤品的高级零售网站:SkinCareRx
2017/02/06 全球购物
任命书怎么写
2014/06/04 职场文书
求职自荐信怎么写
2015/03/04 职场文书
党支部工作总结2015
2015/04/01 职场文书
2015年招生工作总结
2015/05/04 职场文书
七年级作文之环保作文
2019/10/17 职场文书
Python入门学习之类的相关知识总结
2021/05/25 Python
Mysql基础知识点汇总
2021/05/26 MySQL
mongodb的安装和开机自启动详细讲解
2021/08/02 MongoDB
十大最强飞行系宝可梦,BUG燕上榜,第二是飞行系王者
2022/03/18 日漫
「租借女友」第2季樱泽墨角色PV&新视觉图公开
2022/03/21 日漫