未捕获(在承诺中)TypeError:无法使用 axios 设置未定义的属性
2017-08-17
24205
我有这个 vue.js 组件,它使用 axios 来检索
joke
对象的 json 数组:
<template>
<div id="show-jokes-all">
<h2>Showing all jokes</h2>
<div v-for="joke in jokes">
<h2>{{joke.title}}</h2>
<article>{{joke.body}}</article>
<hr>
</div>
</div>
</template>
<script>
import axios from 'axios';
export default {
name: 'showJokes',
data () {
return {
jokes:[]
}
},
methods: {
},
created() {
axios.get('http://127.0.0.1:8090/api/jokes).then(function(data){
//console.log(data); works fine
this.jokes = data.body;
});
}
}
</script>
当我在控制台中记录结果时很好,但是当我尝试将其放入
jokes
数组中时,我得到了
Uncaught (in promise) TypeError: Cannot set property 'jokes' of undefined
这可能是一个微不足道的错误,但作为 vue.js 的新手,我对此很了解,因此非常感谢您的提示。
2个回答
您已脱离
this
上下文。您应该将
this
上下文存储在变量中。
created() {
let self = this
axios.get('http://127.0.0.1:8090/api/jokes').then(function(data){
//console.log(data); works fine
self.jokes = data.body;
});
}
如何在回调中访问正确的
this
?
中有很多方法。您可以参考此处了解多种方法。
感谢 Bert 的评论
Cholowao
2018-02-26
是的,你可以使用 ES6。
<template>
<div id="show-jokes-all">
<h2>Showing all jokes</h2>
<div v-for="joke in jokes">
<h2>{{joke.title}}</h2>
<article>{{joke.body}}</article>
<hr>
</div>
</div>
</template>
<script>
import axios from 'axios';
export default {
name: 'showJokes',
data () {
return {
jokes:[]
}
},
methods: {
},
created() {
axios.get('http://127.0.0.1:8090/api/jokes').then((data) => {
// console.log(data); // works fine
this.jokes = data.body;
});
}
}
</script>
Jian Lan
2018-11-30