在类似博客的Vue.js应用中,帖子以v-for
循环的形式呈现。单击每个帖子下的按钮时,将从服务器获取其评论并按如下方式进行属性分配,因为post
对象没有comments
属性:
`this.$set(post, 'comments', res.data.comments) ;`
呈现评论的代码是这样的:
<div v-for="(c, j) in post.comments" :key="j">
<span>{{c.body}}</span>
<span v-if="post.user_id==userId" @click="delComment(c, post)">Delete me!</span>
</div>
以及删除方法:
delComment(c, post) {
const payload = {
token: this.token,
cid: c.id
}
axios.delete(this.BASE_URL + "/api/comment", { data: payload } )
.then( (res)=> {
post.comments = this.post.comments.filter((comment)=>{
return comment.id != c.id
});
this.$set(post, 'comments', post.comments) ;
})
.catch( error => {
console.log(error);
});
},
但是当我单击Delete链接时,在控制台中出现此错误:
TypeError: Cannot read property 'comments' of undefined
at eval (Home.vue?76f2:540)
我该如何解决?
答案 0 :(得分:1)
您在this
之前缺少post
:
//v-------------//here
this.post.comments = this.post.comments.filter((comment)=>{
return comment.id != c.id
});
在这里:
//----------v--------------------v
this.$set(this.post, 'comments', this.post.comments) ;
更新:
我假设您在数据对象中有一个称为post的属性,如下所示:
data(){
return{
post:[]
...
}
}
因此,在这种情况下,您应删除this
变量之前的所有post
。
答案 1 :(得分:0)
好的,我意识到,罪魁祸首是this
中额外的this.post.comments.filter((comment)
。
工作代码是这样的:
delComment(c, post) {
const payload = {
token: this.token,
cid: c.id
}
axios.delete(this.BASE_URL + "/api/comment", { data: payload } )
.then( (res)=> {
post.comments = post.comments.filter((comment)=>{
return comment.id != c.id
});
this.$set(post, 'comments', post.comments) ;
})
.catch( error => {
console.log(error);
});
},
感谢大家分享您的想法!