Vue ts axios封装

在开发Vue项目时,经常需要与后端进行数据交互。为了简化代码的编写和提高开发效率,我们可以将常用的网络请求封装成一个插件,方便在项目中复用。本文将介绍如何使用Vue和TypeScript来封装axios,并使用这个封装后的库进行网络请求。

安装依赖

首先,我们需要安装一些依赖。在Vue项目的根目录下打开终端,执行以下命令:

npm install axios typescript

其中,axios是一个基于Promise的HTTP客户端,用于发送网络请求;typescript是一种静态类型检查的JavaScript的超集,可以提供更好的代码提示和类型检查。

创建API封装

在src目录下创建一个api目录,并在该目录下创建一个api.ts文件。这个文件将包含我们封装的axios实例和API接口。

import axios, { AxiosRequestConfig, AxiosResponse } from 'axios';

// 创建axios实例
const api = axios.create({
  baseURL: 'http://localhost:3000',
  timeout: 10000
});

// 请求拦截器
api.interceptors.request.use((config: AxiosRequestConfig) => {
  // 在发送请求之前做些什么
  return config;
}, (error: any) => {
  // 对请求错误做些什么
  return Promise.reject(error);
});

// 响应拦截器
api.interceptors.response.use((response: AxiosResponse) => {
  // 对响应数据做些什么
  return response.data;
}, (error: any) => {
  // 对响应错误做些什么
  return Promise.reject(error);
});

// 导出api实例
export default api;

这里我们使用axios.create方法创建了一个axios实例,并设置了基本的配置项,如baseURL和timeout。然后通过请求拦截器和响应拦截器来对请求和响应进行处理。

创建API接口

在api目录下创建一个example.ts文件,用于定义API接口。

import api from './api';

// 示例接口
export function getExample(): Promise<any> {
  return api.get('/example');
}

这里我们导入了之前创建的api实例,并定义了一个getExample方法,用于发送GET请求。

在组件中使用

在Vue组件中,我们可以通过调用API接口来发送网络请求。例如,在Home.vue组件中,我们可以这样使用:

<template>
  <div>
    <button @click="getData">获取数据</button>
    <div>{{ data }}</div>
  </div>
</template>

<script lang="ts">
import { defineComponent, ref } from 'vue';
import { getExample } from '../api/example';

export default defineComponent({
  name: 'Home',
  setup() {
    const data = ref('');

    const getData = async () => {
      try {
        const response = await getExample();
        data.value = response.data;
      } catch (error) {
        console.error(error);
      }
    };

    return {
      data,
      getData
    };
  }
});
</script>

这里我们通过调用getExample方法来获取数据,并将结果赋值给data变量。在模板中显示data的值。

总结

通过封装axios,我们可以在Vue项目中更方便地进行网络请求。通过定义API接口,我们可以将网络请求的逻辑集中在一处,方便维护和复用。同时,使用TypeScript可以提供更好的代码提示和类型检查,减少错误。

以上就是使用Vue和TypeScript封装axios的简单示例。希望对你有所帮助!