【vue】axios 拦截器统一管理加载动画

本文档展示了如何在Vue项目中实现页面加载时的动画效果。通过创建一个loading.vue组件,并结合Vuex来控制动画的显示和隐藏,以及配置axios拦截器在请求开始和结束时切换动画状态。在App.vue中引入loading组件,实现全局的加载动画展示。
摘要由CSDN通过智能技术生成

转载:https://www.jianshu.com/p/35fd3b541c24

效果图

在这里插入图片描述

实现

  1. 编写动画效果

    // src/components/loading.vue
    
    <template>
      <div class="loading"></div>
    </template>
    
    <script>
    export default {};
    </script>
    
    <style lang="less" scoped>
    .loading {
      position: absolute;
      top: 0;
      left: 0;
      bottom: 0;
      right: 0;
      background-color: rgba(255, 255, 255, 0.5);
      background-image: url(".././assets/loading.gif");
      background-repeat: no-repeat;
      background-position: center;
    }
    </style>
    
    
  2. vuex 控制动画显示隐藏

    // src/store/index.js
    
    import Vue from "vue";
    import Vuex from "vuex";
    
    Vue.use(Vuex);
    
    export default new Vuex.Store({
      state: {
        isShow: false
      },
      mutations: {},
      actions: {},
      modules: {}
    });
    
    
  3. 配置 axios 拦截器

    // src/api/request/js
    
    import axios from "axios";
    import router from "@/router";
    import store from "../store";
    
    axios.interceptors.request.use(function(config) {
      store.state.isShow = true;
      return config;
    });
    
    axios.interceptors.response.use(
      function(response) {
        store.state.isShow = false;
        return response;
      },
      function(error) {
        if (error) {
          window.localStorage.removeItem("username");
          router.push("/login");
        }
        return Promise.reject(error);
      }
    );
    
    export default axios;
    
    
  4. app.vue 引入 loading.vue 组件

    // App.vue
    
    <template>
      <div id="app">
        <router-view />
        <loading v-if="this.$store.state.isShow" />
      </div>
    </template>
    
    <script>
    import Loading from "./components/loading.vue";
    export default {
      name: "App",
      components: { Loading }
    };
    </script>
    
    
Vue中使用Axios拦截器可以在发送请求或响应返回前对其进行一些处理。拦截器可以用来添加公共headers、设置loading状态、处理错误等。 首先,你需要安装并导入Axios库。然后在Vue组件中定义拦截器。以下是一个简单的示例: ```javascript // main.js import axios from 'axios'; axios.interceptors.request.use( config => { // 在请求发送前做一些处理,比如添加headers config.headers['Authorization'] = 'Bearer token'; return config; }, error => { // 处理请求错误 return Promise.reject(error); } ); axios.interceptors.response.use( response => { // 在响应返回前做一些处理,比如解析数据 return response; }, error => { // 处理响应错误 return Promise.reject(error); } ); // Vue组件中使用Axios export default { data() { return { responseData: null, loading: false }; }, methods: { fetchData() { this.loading = true; axios.get('/api/data') .then(response => { this.responseData = response.data; this.loading = false; }) .catch(error => { console.error(error); this.loading = false; }); } } }; ``` 在上面的示例中,我们定义了两个拦截器:一个用于请求发送前处理,一个用于响应返回前处理。在请求拦截器中,我们可以添加headers等信息;在响应拦截器中,我们可以对响应数据进行处理。 同时,在Vue组件中使用Axios发送请求时,我们可以通过`then`和`catch`方法来处理响应和错误。在这个示例中,我们设置了一个`loading`状态来展示加载状态,当请求成功后,将返回的数据保存在`responseData`中。 这只是一个简单的示例,你可以根据自己的需求来进行更复杂的处理。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值