我正在尝试从Laravel Vue组件中的API获取数据。 我在控制台中收到此错误:
TypeError:无法设置未定义的属性“大陆”
我想念什么?
这是我的代码:
<script>
export default {
mounted() {
console.log('Component mounted.');
},
created(){
this.loadData();
},
data() {
return {
continents: [],
}
},
methods: {
loadData: function() {
axios.get('/api/continents')
.then(function (response) {
// handle success
console.log(response.data);
this.continents = response.data;
})
.catch(function (error) {
// handle error
console.log(error);
})
.then(function () {
// always executed
});
},
},
}
</script>
答案 0 :(得分:4)
这是axios.get
请求的简单工作演示
var app = new Vue({
el: '#app',
data: {
users:[]
},
mounted(){
this.loadData();
},
methods:{
loadData:function(){
axios.get('https://jsonplaceholder.typicode.com/users').then(res=>{
if(res.status==200){
this.users=res.data;
}
}).catch(err=>{
console.log(err)
});
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<div id="app">
<ol>
<li v-if="users.length>0" v-for="user in users">
{{ user.name }}
</li>
</ol>
</div>
答案 1 :(得分:1)
您应在通话中使用箭头功能,因为此功能在您的实例中不可用。然后使用promise功能。因此,请尝试如下操作。
详细了解箭头功能here
methods: {
loadData: function() {
axios.get('/api/continents')
.then((response) => {
// handle success
console.log(response.data);
this.continents = response.data;
})
.catch(function (error) {
// handle error
console.log(error);
})
.then(function () {
// always executed
});
},
},
答案 2 :(得分:1)
在方法中,必须在回调函数中使用箭头函数语法,以使数据属性可访问。 当使用常规语法声明该函数时,将添加一个“子作用域”,并且回调函数中的this.components会在回调函数中引用“ this”。
将您的方法更改为:
loadData() {
axios.get('/api/continents')
.then((response) => {
// handle success
console.log(response.data);
//now this refers to your vue instance and this can access you data property
this.continents = response.data;
})
.catch((error) => {
// handle error
console.log(error);
})
.then(() => {
// always executed
});
},