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

如何在Vue.js中全局配置自定义Axios实例,直接使用$api调用?

如何让Axios实例全局可用(直接用$api调用)

我来帮你搞定这个问题!你现在每次用axios实例都要手动import确实挺麻烦的,咱们把它改成全局可用的$api,以后用起来就方便多了~

首先看你的~/plugins/axios.js文件,我们只需要修改它的导出逻辑,把axios实例挂载到全局即可,分不同框架场景来说:

情况1:你用的是 Nuxt.js(符合你的文件路径场景)

修改~/plugins/axios.js的内容如下:

import axios from 'axios'

const api = axios.create({
  baseURL: 'http://localhost:8000/api/v1/'
})

// 使用Nuxt的inject方法把api注入到全局
export default ({ app }, inject) => {
  inject('api', api)
}

接下来需要在nuxt.config.js里注册这个插件(如果还没注册的话),找到plugins数组,添加你的axios插件路径:

export default {
  // ...其他配置
  plugins: [
    '~/plugins/axios.js'
  ]
}

完成后,你就可以在任意组件、页面或者asyncData里直接使用this.$api(组件内)或者app.$api(服务端/插件环境)了,比如:

async mounted() {
  const res = await this.$api.get('/user/profile')
  console.log(res.data)
}

情况2:你用的是普通 Vue 2 项目

如果是Vue2,我们可以把axios实例挂载到Vue的原型上,修改plugins/axios.js:

import axios from 'axios'

const api = axios.create({
  baseURL: 'http://localhost:8000/api/v1/'
})

export default Vue => {
  Vue.prototype.$api = api
}

然后在main.js里引入并使用这个插件:

import Vue from 'vue'
import App from './App.vue'
import apiPlugin from './plugins/axios'

Vue.use(apiPlugin)

new Vue({
  render: h => h(App)
}).$mount('#app')

之后在组件里直接用this.$api调用即可。

情况3:你用的是 Vue 3 项目

Vue3不再推荐使用原型挂载,而是用globalProperties来配置全局属性,修改plugins/axios.js:

import axios from 'axios'

const api = axios.create({
  baseURL: 'http://localhost:8000/api/v1/'
})

export default app => {
  app.config.globalProperties.$api = api
}

然后在main.js里注册:

import { createApp } from 'vue'
import App from './App.vue'
import apiPlugin from './plugins/axios'

const app = createApp(App)
app.use(apiPlugin)
app.mount('#app')

这样配置后,在Vue3组件里同样可以用this.$api(选项式API),如果是组合式API,你可以通过getCurrentInstance()来获取:

import { getCurrentInstance } from 'vue'

export default {
  setup() {
    const { appContext } = getCurrentInstance()
    const api = appContext.config.globalProperties.$api

    const fetchData = async () => {
      const res = await api.get('/posts')
      console.log(res.data)
    }

    return { fetchData }
  }
}

这样以后就不用每次都写import api from '~/plugins/axios'啦,直接用$api就能调用你的axios实例了~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:00:21