Element-ui--loading+网络请求

在进行网络请求时,通常不希望用户对界面进行交互,并且提示用户客户端正在网络请求。所以需要有一个东西来阻止交互并且提示用户正在请求网络。于是乎有了以下玩意。。。

我的目录结构:

1.安装element-ui

cnpm i element-ui -S

2.在main.js中引用elementui

import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

3.封装loading

首先创建一个loading.js的文件。并写入一下代码。

import { Loading } from 'element-ui';
 
let loadingCount = 0;
let loading;
 
const startLoading = () => {
  loading = Loading.service({
    lock: true,
    text: '拼命加载中...',//可以自定义文字
    spinner:'el-icon-loading',//自定义加载图标类名
    background: 'rgba(0, 0, 0, 0.7)'//遮罩层背景色
  });
};
 
const endLoading = () => {
  loading.close();
};
 
export const showLoading = () => {
  if (loadingCount === 0) {
    startLoading();
  }
  loadingCount += 1;
};
 
export const hideLoading = () => {
  if (loadingCount <= 0) {
    return;
  }
  loadingCount -= 1;
  if (loadingCount === 0) {
    endLoading();
  }
};

然后在base.helper.js文件中写入如下代码:

import axios from 'axios'
import {
    showLoading,
    hideLoading
} from './loading';

import Qs from 'qs'
const service = axios.create({ //这个service是自定义(你自己起的名字)
    baseURL: 'http://rap2api.taobao.org/app/mock/23080/resources/search', //请求的公共地址
    timeout: 3000, // 请求超时时间
    // headers: {'X-Custom-Header': 'foobar'}
});
// 请求拦截器
service.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    showLoading();// 开启loading
    // console.log('拦截到了config');
    return config;
}, function (error) {
    // 对请求错误做些什么
    hideLoading();
    return Promise.reject(error);
});
// 响应拦截器
service.interceptors.response.use(
    response => {
        const res = response.data;
        console.log("response", response)
        hideLoading();// 关闭loading
        // console.log('请求回来的数据', res);
        return res;
    },
    error => {
        // TODO 弹窗处理
        alert(error.message);
        hideLoading();// 关闭loading
        return Promise.reject(error)
    }
)

var $http = {
    getData_fob: async function () {
        var res = await service.get()
        console.log("res", res)
    }
}
export default {
    $http
}

最后在组件中使用

<template>
  <div>
    <button @click="toolTest()">工具库测试</button>
  </div>
</template>

<script>
import $tool from '@/api/base.helper'
export default {
  name: "AxiosDemo",
  data(){
    return{
    }
  },
  methods: {
    toolTest(){
      $tool.$http.getData_fob()
    }
  },
};
</script>

<style>
</style>

loading组件转载于:https://blog.youkuaiyun.com/miao_yf/article/details/100727069

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值