前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >axios 拦截器显示和关闭Loading

axios 拦截器显示和关闭Loading

作者头像
tianyawhl
发布2019-12-15 20:55:06
2.8K0
发布2019-12-15 20:55:06
举报
文章被收录于专栏:前端之攻略前端之攻略

使用Loading分为2种情况,第一种是使用一些组件库自带的loading,另一种是使用我们自己写的loading,现分开介绍使用方法

一、使用element ui 带的Loading

1、在main.js 中引入axios 和elementui

代码语言:javascript
复制
// 引入element-ui 组件
import ElementUI from 'element-ui'
// 引入element-ui 样式文件
import 'element-ui/lib/theme-chalk/index.css'
import axios from "axios"
Vue.use(ElementUI)
Vue.prototype.$axios = axios

2、在main.js 中设置Loading 显示和关闭函数

代码语言:javascript
复制
let loading;
function startLoading() {
	//如果根实例设为变量VUE var VUE = new Vue({}) 也可写成下面的 
    // loading = VUE.$loading({
    //   lock: true,
    //   text: "拼命加载中...",
    //   background: 'rgba(0,0,0,0.2)'
    // })
    loading = ElementUI.Loading.service({
        lock: true,
        text: "加载中...",
        background: 'rgba(0,0,0,0.2)'
    })
}

function endLoading() {
    loading.close()
}

3、同样在main.js 中设置请求和响应拦截器

代码语言:javascript
复制
// 请求数据拦截器
axios.interceptors.request.use(config => {
    console.log("拦截器")
    startLoading()
    return config
})
// 响应数据拦截器
axios.interceptors.response.use(response => {
    endLoading()
    return response
})

二、使用自己在页面中写的Loading

1、新建一个loading.vue 组件

代码语言:javascript
复制
<template>
  <div class="loader">
    <div class="loading" id="loading">
      <div class="animateWrap">
      <span></span>
      <span></span>
      <span></span>
      <span></span>
      <span></span>
      </div>
      <div class="text">正在加载</div>
    </div>
  </div>
</template>

<script>
// import theme from '@/assets/js/theme/shine.js'
export default {
  data() {
    return {};
  },

  methods: {},
  mounted(){
    var spanli = document.getElementById("loading").getElementsByTagName("span");
    for(var i=0;i<spanli.length;i++){
      spanli[i].style.webkitAnimationDelay = 0.13*i+"s"
    }
  }
};
</script>
<style>
.loader {
  position: fixed;
  left: 0;
  top: 0;
  bottom: 0;
  right: 0;
  background: rgba(0, 0, 0, 0.3);
  z-index: 20;
}
.loading {
  position: absolute;
  width: 70px;
  height: 70px;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  margin: auto;
 
}
.loading span {
  display: inline-block;
  width: 8px;
  height: 30px;
  border-radius: 3px;
  margin: 3px;
  background: #5af3f3;
  -webkit-animation:line-square 1s infinite;
}
.text{color:#5af3f3;}
@-webkit-keyframes line-square{
  0%{
    transform:scaleY(1)
  }
  50%{
    transform:scaleY(0.3)
  }
  100%{
    transform:scaleY(1)
  }
}
</style>

2、在App.vue 引入注册并使用loading.vue组件

代码语言:javascript
复制
<template>
    <div id="app">
        <ul class="nav" ref="nav">
            <router-link tag="li" :to='{name:"home"}'>首页</router-link>
            <router-link tag="li" :to="{name:'chart'}">图表</router-link>
            <router-link tag="li" :to="{name:'exportTable'}">表格</router-link>
            <router-link tag="li" :to="{name:'formTest'}">表单测试</router-link>
            <router-link tag="li" :to="{name:'layoutContainer'}">布局容器</router-link>
        </ul>
        {{message}}
        <router-view />
        <Loading v-if="this.$store.state.loadingShow" />
    </div>
</template>

<script>
import Loading from "@/components/loading.vue"
export default {
  name: 'App',
  data(){
    return{
     
    }    
  },
  components:{Loading},
}
</script>

3、在store 中初始化loadingShow

代码语言:javascript
复制
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    loadingShow:false
  },
  mutations: {
  },
  actions: {
  },
  modules: {
  }
})

4、在main.js中设置请求和响应拦截器

代码语言:javascript
复制
// 请求数据拦截器
axios.interceptors.request.use(config => {
    console.log("拦截器")
    //startLoading()
    store.state.loadingShow = true
    return config
})
// 响应数据拦截器
axios.interceptors.response.use(response => {
    //endLoading()
    store.state.loadingShow = false
    return response
})
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、使用element ui 带的Loading
  • 二、使用自己在页面中写的Loading
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档