当前位置:   article > 正文

二次封装axios,请求加载进度条_axios ts封装 支持进度

axios ts封装 支持进度
一、利用npm 官网的nprogress
  1. // axios 的二次封装
  2. import axios from 'axios'
  3. //下面可以是任意插件 我们以进度条为例 二次封装一个请求过程中自动出现进度条的案例
  4. import Nprogress from 'nprogress'
  5. import "nprogress/nprogress.css"
  6. // 刚刚发起请求的时候先拦截一下
  7. // 必须在拦截器中return config
  8. axios.interceptors.request.use((config) => {
  9. //进度条开启
  10. Nprogress.start()
  11. // config 是请求前配置的内容
  12. return config
  13. })
  14. // 响应结果后拦截一下
  15. axios.interceptors.response.use((data) => {
  16. //进度条关闭
  17. Nprogress.done()
  18. //data 是返回的请求结果 如果自定义输入 请求返回就为自定义值
  19. return data
  20. })
  21. export default axios
二、使用element ui 的loading 组件,添加请求接口的loading 效果  vue2

.安装element-ui; 打开官网 : https://element.eleme.cn/2.13/#/zh-CN/component/installation

 安装 npm i element-ui -S  按需引入 npm install babel-plugin-component -D

按照官网步骤来

  项目的根目录下面添加.balelrc文件,在文件内添加下面的代码

  {

  "plugins":[

    [

      "component",

      {

        "libraryName": "element-ui",

        "styleLibraryName": "theme-chalk"

      }

    ]

  ]

}

  1. import axios from "axios";
  2. import { Loading } from 'element-ui';
  3. import router from '../router/index.js'
  4. const instance = axios.create({
  5. baseURL: '',
  6. timeout: 5000,
  7. });
  8. let loadingInstance =null;
  9. // 添加请求拦截器
  10. instance.interceptors.request.use(function (config) {
  11. // 在发送请求之前做些什么
  12. loadingInstance = Loading.service({
  13. text:'正在加载中。。。。。'
  14. });
  15. const token=localStorage.getItem('token');
  16. if(token){
  17. config.headers.Authorization='Bearer '+token;
  18. }
  19. return config;
  20. }, function (error) {
  21. // 对请求错误做些什么
  22. return Promise.reject(error);
  23. });
  24. // 添加响应拦截器
  25. instance.interceptors.response.use(function (response) {
  26. // 2xx 范围内的状态码都会触发该函数。
  27. // 对响应数据做点什么?
  28. loadingInstance?.close();
  29. return response;
  30. }, function (error) {
  31. // 超出 2xx 范围的状态码都会触发该函数。
  32. // 对响应错误做点什么
  33. loadingInstance?.close();
  34. const status=error.response.status;
  35. if(status==404){
  36. router.push('/qwer',()=>{},()=>{});
  37. return error.response
  38. }
  39. if(status==401){
  40. alert('token已失效或者是token被篡改了')
  41. router.push('/login',()=>{},()=>{});
  42. return error.response;
  43. }
  44. return Promise.reject(error);
  45. });
  46. export default instance
三、在vue3中,咱们使用的是element-plus组件库

1、下载安装组件库,并在组件库中找到loadding这个组件

 npm install element-plus --save

2、在封装的axios中引入,并结合axios使用

  1. import axios from 'axios';
  2. import { ElLoading } from 'element-plus'
  3. const loadingInstance = () => {
  4. const options = {
  5. lock: true, //
  6. text: "加载中。。。。", //加载图标下方的加载文案
  7. background: 'rgba(0,0,0,0.7)' //遮罩背景色
  8. }
  9. ElLoading.service(options)
  10. }
  11. const endLoading = () => {
  12. loadingInstance.close()
  13. }
  14. // 添加请求拦截器
  15. axios.interceptors.request.use(function (config) {
  16. // 在发送请求之前做些什么
  17. //开始加载
  18. loadingInstance()
  19. return config;
  20. }, function (error) {
  21. // 对请求错误做些什么
  22. return Promise.reject(error);
  23. });
  24. // 添加响应拦截器
  25. axios.interceptors.response.use(function (response) {
  26. // 对响应数据做点什么
  27. //关闭loading
  28. endLoading()
  29. return response;
  30. }, function (error) {
  31. // 对响应错误做点什么
  32. //关闭loading
  33. endLoading()
  34. return Promise.reject(error);
  35. });
  36. export default axios

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/285607
推荐阅读
相关标签
  

闽ICP备14008679号