我用VueJs和Laravel创建SPA。 主页我通过api laravel得到所有帖子,axio响应有数据对象。 但我无法更新帖子属性。
我在Wellcome.vue的代码
import { mapGetters } from 'vuex'
import axios from 'axios'
export default {
name: 'welcome',
layout: 'default',
metaInfo: { titleTemplate: 'Welcome | %s' },
computed: mapGetters({
authenticated: 'authCheck'
}),
data: () => ({
title: 'Demo Blog',
}),
props: {
posts: {
type: Object
}
},
created () {
axios.get('/api/posts')
.then(function (response) {
this.posts = response.data;
})
.catch(function (error) {
console.log(error);
});
},
}
答案 0 :(得分:5)
您使用常规函数作为回调,这意味着this
引用更改。你需要在这里使用箭头功能。 () => {}
。
axios.get('/api/posts')
.then((response) => {
this.posts = response.data;
})
.catch((error) => {
console.log(error);
});
答案 1 :(得分:1)
首先,您在props属性中定义了posts
。你不应该改变子组件的道具。道具是One-Way-Data-Flow
您可以在数据属性中初始化posts
,如下所示:
data(){
return{
posts: null
}
}
然后,您可以通过API获取数据并将其分配给数据属性中的posts
this
函数中的 then
未指向vue实例。
所以你做得更好
created () {
var vm = this;
axios.get('/api/posts')
.then(function (response) {
vm.posts = response.data;
})
.catch(function (error) {
console.log(error);
});
},
}
或者你=>像这样的功能
created () {
axios.get('/api/posts')
.then( (response) => {
this.posts = response.data;
})
.catch(function (error) {
console.log(error);
});
},
}