vue axios接口封装及使用 以及全局的加载状态

request.js文件

import axios from 'axios'
import { Loading, Message } from "element-ui";
//接口请求的时候 的加载状态
import { Loading } from 'element-ui';
let loading //定义loading变量
function startLoading() { //使用Element loading-start 方法
    loading = Loading.service({
        lock: true,
        text: '加载中',
        background: 'rgba(0, 0, 0, 0.3)',
        spinner: "el-icon-loading",
    })
}
function endLoading() { //使用Element loading-close 方法
    loading.close()
}

//那么 showFullScreenLoading() tryHideFullScreenLoading() 要干的事儿就是将同一时刻的请求合并。
//声明一个变量 needLoadingRequestCount,每次调用showFullScreenLoading方法 needLoadingRequestCount + 1。
//调用tryHideFullScreenLoading()方法,needLoadingRequestCount - 1。needLoadingRequestCount为 0 时,结束 loading。
let needLoadingRequestCount = 0
export function showFullScreenLoading() {
    if (needLoadingRequestCount == 0) {
        startLoading()
    }
    needLoadingRequestCount++

}
function tryHideFullScreenLoading() {
    if (needLoadingRequestCount <= 0) return
    needLoadingRequestCount--
    if (needLoadingRequestCount == 0) {
        endLoading()
    }
}

const service = axios.create({
    baseURL: '接口地址',
    timeout: 5000,
})

service.interceptors.request.use(
    config => {
        if (typeof config.data == "object") {
            if (window.sessionStorage.getItem("user_id")) {
                config.data.user_id = window.sessionStorage.getItem("user_id")   
            }
        }
        showFullScreenLoading()
        return config;
    },
    error => {
        return Promise.reject(error);
    }
);
service.interceptors.response.use(
    response => {
        const res = response.data;
        setTimeout(tryHideFullScreenLoading, 100)
        if (res.code !== 200) {
            Message({
                message: res.msg || 'Error',
                type: 'error',
                duration: 2 * 1000
            });
            return Promise.reject(new Error(res.msg || '拒绝'));
        } else {
            return res;
        }

    },
    error => {
        Message({
            message: error.message,
            type: "error",
            duration: 5 * 1000
        });

        return Promise.reject(error);
    }
);
export default service

api文件 index.js

import request from '@/utils/request'

// 首页banner图
export const getUser = (data) => request({
    url: '/login/get_user',
    method: 'POST',
    data
});
// 主题课程
export const culum = (data) => request({
    url: '/index/culum',
    method: 'POST',
    data
});

组件中使用:

import { banner,culum } from "../api/index";
methods:{
// 获取banner
 getBanner() {
   banner().then((res) => {
   // console.log(res);
   this.bannerList = res.data.banner;
   });
 },
 getCulum() {
   culum().then((res) => {
   // console.log(res);
   this.culumList = res.data.category;
   });
 }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值