• [vue3] Axios 使用


     ✨✨个人主页:沫洺的主页

    📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 

                               📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专栏

                               📖Docker专栏📖Reids专栏📖MQ专栏📖SpringCloud专栏     

    💖💖如果文章对你有所帮助请留下三连✨✨

    📅标题

    🎈axios中文网:axios API中文文档

    🎃安装

    🎈npm install axios

    🎃统一封装类,新建src/http/index.ts

    1. import axios, { AxiosRequestConfig, AxiosRequestHeaders, AxiosResponse, } from "axios";
    2. //弹窗图标和加载图标
    3. import { ElMessage, ElLoading } from "element-plus";
    4. //返回数据规则
    5. interface IResponseData {
    6. status: number;
    7. message?: string;
    8. data: T;
    9. code: string;
    10. }
    11. //默认配置,封装了一个实例对象
    12. const config = {
    13. baseURL: "",
    14. timeout: 30 * 1000,
    15. withCredentials: true,
    16. };
    17. let loading: any = null;
    18. //类似定义一个类
    19. class Http {
    20. axiosInstance; //定义了一个axiosInstance属性,未来它放的是一个axios实例
    21. constructor(config: any) {
    22. //实例化请求配置
    23. this.axiosInstance = axios.create(config);
    24. // 添加请求拦截器
    25. this.axiosInstance.interceptors.request.use(function (config) {
    26. //在发送请求之前做些什么
    27. //弄了一个加载的过度
    28. loading = ElLoading.service({
    29. lock: true,
    30. text: '加载中...',
    31. background: 'rgba(0, 0, 0, 0.7)',
    32. //覆盖整个屏幕
    33. fullscreen: true
    34. })
    35. return config;
    36. }, function (error) {
    37. loading.close();
    38. // 对请求错误做些什么
    39. return Promise.reject(error);
    40. });
    41. // 添加响应拦截器
    42. this.axiosInstance.interceptors.response.use(function (response) {
    43. // 对响应数据做点什么
    44. loading.close();
    45. let apiData = response.data;
    46. console.log(apiData)
    47. console.log(apiData.data)
    48. //将apiData的属性取出来
    49. const { code, message, data } = apiData;
    50. //取出来之后处理属性
    51. if (code === undefined) {
    52. return apiData;
    53. }else if (code === 0) {
    54. return data;
    55. }else {
    56. ElMessage.error(message)
    57. }
    58. return apiData.data;
    59. }, function (error) {
    60. // 对响应错误做点什么
    61. loading.close();
    62. return Promise.reject(error);
    63. });
    64. }
    65. get(url: string, params?: object, data = {}): Promise<IResponseData> {
    66. return this.axiosInstance.get(url, { params, ...data });
    67. }
    68. post(url: string, params?: object, data = {}): Promise<IResponseData> {
    69. return this.axiosInstance.post(url, params, data);
    70. }
    71. put(url: string, params?: object, data = {}): Promise<IResponseData> {
    72. return this.axiosInstance.put(url, params, data);
    73. }
    74. }
    75. //类似new了一个实例
    76. export default new Http(config);

    🎃FastMock模拟接口

    🎈网址: FastMock

     注册账号,登录添加测试接口

     🎈进入项目,添加接口

    🎃Proxy配置

    🎈在vite.config.ts 文件中

    1. proxy: {
    2. "/api": {
    3. target: "https://www.fastmock.site/mock/97c4bc10d4f77d8b92565affb090058c/",
    4. changeOrigin: true,
    5. },
    6. },

    🎃使用axios异步请求

    1. <script setup lang="ts">
    2. import {ref,onMounted} from 'vue'
    3. import http from "@/http/index"
    4. //定义tableData
    5. const tableData:any = ref([])
    6. onMounted(()=>{
    7. http.get("/api/poduct/list", {name:"moming"}).then((data) => {
    8. tableData.value=data
    9. }).catch((error) => {
    10. console.log("error")
    11. })
    12. })
    13. script>

    💦 效果图

    🎃代码优化说明

     🎈这里的加载就是效果图一

    🎈加载时长设置

    🎈 代码优化

    🎈 在src下api/productApi.ts文件,用来存放接口

    🎈productApi.ts

    1. import http from "@/http/index"
    2. //抽取方法
    3. const productApi = {
    4. select: {
    5. name: "商品查询",
    6. url: "/api/poduct/list",
    7. // async 异步方法 await 等待
    8. call: async function (params: any) {
    9. return await http.get(this.url, params);
    10. }
    11. },
    12. insert: {
    13. },
    14. update: {
    15. },
    16. }
    17. //导出,类似于public公用
    18. export default productApi;

    🎈List.vue

    1. <script setup lang="ts">
    2. import { ref, onMounted } from 'vue'
    3. //导入productApi
    4. import productApi from '@/api/productApi'
    5. //定义tableData
    6. const tableData: any = ref([])
    7. onMounted(() => {
    8. callApi();
    9. })
    10. const callApi = () => {
    11. //因为在http/index.ts中对响应的数据已经处理过了,所以直接写data见名知意
    12. productApi.select.call({}).then((data) => {
    13. //给tableData赋值
    14. tableData.value = data
    15. })
    16. }
    17. script>

     💦报错效果图

    🎈模拟异常报错

    🎈​​​​​​​图中的消息提示框就是上面说明中的ElMessage.error(message),使用的是Element中的Feedback反馈组件中的Message消息提示 

  • 相关阅读:
    基于BP神经网络算法的实现静态图片和视频人脸识别、性别识别
    记录在搭建Jenkins时,所遇到的坑,以及解决方案
    【BOOST C++指针专题07】Boost.Pool
    C++ 之 移动构造函数
    脊髓型颈椎病是什么?
    Dubbo-聊聊通信模块设计
    java基于微信小程序的校园服务平台 uniapp 小程序
    ssm南工二手书交易平台毕业设计源码172334
    自动化办公篇之python批量改名
    web网页设计期末课程大作业——海贼王大学生HTML网页制作 HTML+CSS+JS网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计
  • 原文地址:https://blog.csdn.net/HeyVIrBbox/article/details/126869899