请你扮演一个高级前端,告诉我axios封装了请求拦截和响应拦截,所有的接口都会走这里的拦截和响应,请求拦截中设置了vant中的toast,响应拦截中清除了toast,但是我在页面中使用toast时,想多停留几秒,而不是接口响应后就清除,该怎么设置,所有的接口都走了全局的请求拦截和响应,请你用代码实例展示
时间: 2024-03-17 11:41:23 浏览: 39
axios全局请求参数设置,请求及返回拦截器的方法.docx
好的,以下是一种可能的实现方式:
```javascript
import axios from 'axios';
import { Toast } from 'vant';
// 创建axios实例
const service = axios.create({
baseURL: process.env.BASE_API,
timeout: 5000
});
// 请求拦截器
service.interceptors.request.use(
config => {
// 在请求发送之前,显示toast
Toast.loading({
message: '加载中...',
forbidClick: true,
duration: 0 // 不会自动消失
});
return config;
},
error => {
// 请求错误时,关闭toast
Toast.clear();
console.error(error);
Promise.reject(error);
}
);
// 响应拦截器
service.interceptors.response.use(
response => {
// 在响应接收之后,关闭toast
Toast.clear();
return response;
},
error => {
// 响应错误时,关闭toast
Toast.clear();
console.error(error);
return Promise.reject(error);
}
);
export default service;
```
在上述代码中,我们使用了vant提供的`Toast`组件,它可以方便地实现toast消息的显示和隐藏。在请求拦截器中,我们使用`Toast.loading`方法显示一个加载中的toast,同时设置`duration: 0`,表示不会自动消失,这样就可以在页面中自由控制toast的显示时间。在响应拦截器中,我们使用`Toast.clear`方法关闭toast。
在页面中使用toast时,可以通过以下方式来控制显示时间:
```javascript
import request from '@/utils/request';
request.get('/api/test').then(() => {
this.$toast({
message: '请求成功',
duration: 3000 // 显示3秒钟
});
}).catch(() => {
this.$toast({
message: '请求失败',
duration: 3000 // 显示3秒钟
});
});
```
在上述代码中,我们在请求成功或失败时分别使用`this.$toast`方法显示一个toast消息,同时设置`duration: 3000`,表示显示3秒钟。这样就可以实现在页面中自由控制toast的显示时间。
阅读全文