请你扮演一个高级前端,告诉我axios封装了请求拦截和响应拦截,所有的接口都会走这里的拦截和响应,请求拦截中设置了vant中的toast,响应拦截中清除了toast,但是我在页面中使用toast时,想多停留几秒,而不是接口响应后就清除,该怎么设置,所有的接口都走了全局的请求拦截和响应,请你用代码实例展示
时间: 2024-03-17 14:41:40 浏览: 77
axios的请求封装以及拦截器相关配置
好的,首先我们来看一下axios的拦截器相关代码:
```javascript
import axios from 'axios';
import { Toast } from 'vant';
// 创建axios实例
const service = axios.create({
baseURL: process.env.BASE_API, // api的base_url
timeout: 5000 // 请求超时时间
});
// request拦截器
service.interceptors.request.use(config => {
// 在请求发出之前进行一些操作,比如说在每个请求的header中加入token
config.headers['X-Token'] = getToken();
Toast.loading({ message: '加载中...', duration: 0, forbidClick: true }); // Vant中的toast
return config;
}, error => {
console.log(error); // for debug
Promise.reject(error);
});
// respone拦截器
service.interceptors.response.use(
response => {
// 对响应数据做些事情,比如说对返回的code进行解析
Toast.clear(); // 清除Vant中的toast
const res = response.data;
if (res.code !== 200) {
// 这里可以根据后端返回的code进行一些特殊处理
console.log('error');
} else {
return response.data;
}
},
error => {
console.log('err' + error); // for debug
Toast.clear(); // 清除Vant中的toast
return Promise.reject(error);
}
);
export default service;
```
以上代码中,我们定义了axios的请求拦截器和响应拦截器,请求拦截器中使用了Vant中的toast,在每个请求发出前显示加载中;响应拦截器中清除了Vant中的toast,并对返回的数据进行了一些处理。
现在,我们来看一下如何单独控制某个页面的toast展示时长。我们可以在页面中使用Vant的$toast服务,$toast服务可以设置duration属性来控制展示时长。
```javascript
<template>
<div class="page">
<button @click="submit">提交</button>
</div>
</template>
<script>
import { Toast } from 'vant';
import axios from '@/utils/axios';
export default {
data() {
return {
form: {
name: '',
phone: ''
}
};
},
methods: {
submit() {
axios.post('/api/submit', this.form).then(res => {
Toast.success('提交成功', { duration: 2000 }); // 设置展示时长为2秒
});
}
}
};
</script>
```
以上代码中,我们在页面中使用Vant的$toast服务,在接口请求成功后展示提交成功,同时设置duration属性为2秒,从而控制toast展示的时长。
希望以上代码对你有所帮助!
阅读全文