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

Vue中使用Axios调用API时报错:TypeError: Cannot read property 'get' of undefined

解决Vue中Axios调用时"TypeError: Cannot read property 'get' of undefined"的问题

这个报错的原因很明确:你在组件里用this.axios尝试调用get方法,但当前Vue实例的this上根本没有axios这个属性——你把axios挂载到了window对象上,却没让组件实例能通过this访问到它。下面给你几种可行的解决方案,按推荐程度排序:

方案一:组件内直接导入axios(推荐,按需引入)

这是最规范的组件级用法,只在需要的组件里引入axios,避免全局污染:

<template> 
<div class="home"> 
<h1>{{ msg }}</h1> 
<p>Welcome to your new single-page application, built with <a href="https://vuejs.org" target="_blank">Vue.js</a>.</p> 
</div> 
</template> 
<script> 
// 去掉window.axios的赋值,改用import导入
import axios from "axios"; 

export default { 
name: 'Home', 
props: { 
msg: String 
}, 
components: { },  // 这里你写错了,是components复数形式!
mounted: function () { 
alert('Hi '); 
// 直接用导入的axios变量,无需this
axios.get('https://api.github.com/users') 
.then(value => { 
// 注意:直接alert对象会显示[object Object],建议转成字符串查看内容
alert(JSON.stringify(value.data)); 
}); 
} 
}; 
</script> 
<style scoped> 
</style>

另外补充:你代码里的component: { }应该是components: { }(复数形式),虽然这不是当前报错的原因,但也是一个需要修正的小细节。

方案二:全局挂载axios到Vue原型(适合项目多处使用axios)

如果你的项目很多组件都需要用到axios,可以在入口文件(比如main.js)里把axios挂载到Vue的原型上,这样所有组件都能通过this访问:

// main.js中的代码
import Vue from 'vue'
import axios from 'axios'
import App from './App.vue'

// 挂载到原型,用$前缀避免和组件内部属性冲突
Vue.prototype.$axios = axios

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

之后在组件里就可以这样调用:

mounted: function () {
  alert('Hi ');
  this.$axios.get('https://api.github.com/users')
  .then(value => {
    alert(JSON.stringify(value.data));
  });
}

方案三:直接使用window.axios(最简单但不推荐)

既然你已经把axios赋值给了window.axios,也可以直接在组件里用这个全局变量,不过这种方式会污染全局作用域,不建议在大型项目里使用:

mounted: function () {
  alert('Hi ');
  window.axios.get('https://api.github.com/users')
  .then(value => {
    alert(JSON.stringify(value.data));
  });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:42:51