vue中axios请求全局封装loading动画

 以服务的方式调用的全屏 Loading 是单例的:若在前一个全屏 Loading 关闭前再次调用全屏 Loading,并不会创建一个新的 Loading 实例,而是返回现有全屏 Loading 的实例,所以我们全局封装的时候采用计数的方式确定是否关闭loading.

还需要注意的是Loading.service target里面可以配置局部现实加载动画,适应于实际项目中不需要全屏显示加载动画


import axios from "axios";
import { Message } from 'element-ui';
import { Loading } from "element-ui";
import ipConfig from "./ip-config";
let requestCount = 0
let loadingInstance = null
function logout() {
     localStorage.setItem("token2", undefined);
     localStorage.setItem("loginTime2", Date.now());
     localStorage.setItem("userName2", "");
     window.location.href = "/";
}
const service = axios.create({
     baseURl: ipConfig.baseIp,
     timeout: 30 * 1000,//设置6分钟
});
//请求拦截器
service.interceptors.request.use(config => {
     //发请求前做的一些处理,数据转化,配置请求头,设置token,设置loading等&
### 如何在 Vue 3 中使用 Axios 进行 GET 请求 为了使 Axios 可用于整个应用程序,在 `main.js` 文件中配置 Axios 是一种常见做法[^2]。然而,对于 Vue 3 的具体实现方式稍有不同。 #### 安装 AxiosVue-Axios 插件 首先安装所需的 npm 包: ```bash npm install axios vue-axios ``` 接着修改项目入口文件 `main.js` 或者 `main.ts` 来全局注册 Axios 实例以便于在整个应用内调用它: ```javascript import { createApp } from 'vue' import App from './App.vue' // 导入 axios 库以及 vue-axios 桥接库 import axios from 'axios'; import VueAxios from 'vue-axios'; const app = createApp(App); app.use(VueAxios, axios); app.mount('#app'); ``` #### 创建服务实例 (可选) 如果希望进一步封装 HTTP 请求逻辑,则可以创建独立的服务模块来处理这些操作。这有助于保持代码整洁并促进重用性。 ```javascript // src/services/apiService.js import axios from "axios"; export default class ApiService { static get(url) { return axios.get(url).then(response => response.data); } } ``` #### 发起 GET 请求 现在可以在任何组件内部通过注入的方式轻松发起网络请求了。下面是一个简单的例子展示怎样获取数据并在模板里显示出来。 ```html <template> <div v-if="loading">Loading...</div> <ul v-else> <li v-for="(item,index) in items" :key="index">{{ item.title }}</li> </ul> </div> </template> <script setup> import { ref, onMounted } from 'vue'; import ApiService from '@/services/apiService'; let loading = ref(true); let items = ref([]); onMounted(async () => { try{ const data = await ApiService.get('https://jsonplaceholder.typicode.com/posts'); items.value = data; }catch(error){ console.error("There was an error fetching the posts!",error); }finally{ loading.value=false; } }); </script> ``` 此段代码展示了如何利用组合式 API (`setup`) 函数中的生命周期钩子 `onMounted()` 去执行异步加载任务,并且当页面初次渲染完成后自动触发一次 GET 请求去拉取远程资源列表[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值