You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vue.js中实现Axios API请求的复用?

在Vue.js中全局复用Axios API请求的方案

我来给你捋捋怎么实现这个需求,其实分几步就能轻松搞定API请求的复用,还能让所有组件直接调用这些函数:

第一步:先封装你的API请求模块

首先把所有的API请求逻辑抽出来,单独放到一个文件里(比如叫api.js),这样方便统一管理配置和请求函数:

// api.js
const axios = require('axios');

// 先给Axios做全局配置,比如接口域名、超时时间这些
axios.defaults.baseURL = 'https://你的接口域名.com';
axios.defaults.timeout = 5000;

// 可选:添加请求拦截器,比如自动带上登录token
axios.interceptors.request.use(config => {
  const token = localStorage.getItem('user_token');
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
}, error => {
  return Promise.reject(error);
});

// 封装具体的API请求函数,按业务分类就行
export const api = {
  // 示例:获取用户信息
  getUserInfo(userId) {
    return axios.get(`/users/${userId}`);
  },
  // 示例:提交表单
  submitForm(formData) {
    return axios.post('/form/submit', formData);
  },
  // 你可以根据自己的业务需求,添加更多请求函数
};

第二步:把API挂载到Vue全局

回到你的主入口文件(比如app.js),把刚才封装好的API模块挂载到Vue的原型上,这样所有Vue实例和组件都能直接调用:

// app.js
window.axios = require('axios');
window.Vue = require('vue');

// 引入我们封装的API模块,注意路径要和你的文件结构匹配
const { api } = require('./api.js');

// 关键一步:把API挂载到Vue原型,这样组件里就能用this.$api访问
Vue.prototype.$api = api;

const app = new Vue({
  el: '#app',
  mounted(){
    console.log('hello!');
    // 这里也能直接调用API啦
    this.$api.getUserInfo(123)
      .then(res => console.log('用户信息:', res.data))
      .catch(err => console.error('请求失败:', err));
  }
});

第三步:在组件里直接调用API

现在不管是哪个Vue组件,都可以用this.$api直接调用封装好的请求函数,再也不用重复写axios配置啦:

<template>
  <div>
    <button @click="fetchUserData">获取用户数据</button>
  </div>
</template>

<script>
export default {
  methods: {
    async fetchUserData() {
      try {
        const res = await this.$api.getUserInfo(456);
        console.log('组件拿到的用户数据:', res.data);
        // 这里处理你的业务逻辑就行
      } catch (err) {
        console.error('请求出错啦:', err);
      }
    }
  }
}
</script>

进阶:用Vue插件方式封装(适合大型项目)

如果你的项目比较大,用Vue插件的方式会更规范:

// api-plugin.js
const axios = require('axios');

// Axios全局配置
axios.defaults.baseURL = 'https://你的接口域名.com';

// API请求函数
const api = {
  getUserInfo(userId) {
    return axios.get(`/users/${userId}`);
  },
  // 更多请求函数...
};

// 定义Vue插件
const ApiPlugin = {
  install(Vue) {
    Vue.prototype.$api = api;
  }
};

module.exports = ApiPlugin;

然后在主入口文件里使用插件:

// app.js
window.Vue = require('vue');
const ApiPlugin = require('./api-plugin.js');

// 注册插件
Vue.use(ApiPlugin);

const app = new Vue({
  el: '#app',
  mounted(){
    this.$api.getUserInfo(789).then(res => console.log(res.data));
  }
});

这样做的好处简直不要太多:

  • 所有请求逻辑集中管理,后期改接口地址或者加拦截器,只需要改一个地方
  • 组件里调用API超级简洁,不用每次都引入axios或者重复写请求路径
  • 统一的错误处理逻辑也能放到api模块里,减少重复代码

内容的提问来源于stack exchange,提问作者rook

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:52:26