【发布时间】:2021-08-19 01:14:05
【问题描述】:
我正在尝试使用 vue 组件呈现嵌套列表。到目前为止,我的方法是创建两个组件:一个组件用于呈现“博客”帖子,一个组件用于呈现 cmets。 “博客”渲染得很好,但整个“cmets”都不见了。除了警告之外,我没有收到任何错误,我应该列表应该有明确的键。有人可以解释为什么“cmets”没有渲染吗?
var myBlogMainBody = {
props: ['blog'],
template: '<div>'+
'<h3>{{blog.title}}</h3>'+
'<p>{{blog.content}}</p></div>'
}
var myCommentBody = {
props: ['comment'],
template: '<div><h4>Kommentare</h4>' +
'{{comment.author}}' +
'<td>{{comment.content}}</div>' /* +
'<table><tr><td>Autor</td><td><input v-model="blog.comment.author"></textarea></td></tr>' +
'<tr><td>Kommentar</td><td><textarea v-model="blog.comment.content"></textarea></td></tr></table>' +
'<button v-on:click="$emit(`commit-new-comment`,comment)">Kommentieren</button></div>' */
}
var vm = new Vue({
el:'#app',
data:{ blogEntries:[{
title: 'Erster Blogeintrag',
content: 'Hier steht mein Inhalt',
comments:[{
author: 'Henning',
content: 'Scheiß blog'
},{
author:'Maike',
content: 'Guter Blog!'
}]
},
{
title: 'Zweiter Blogeintrag',
content: 'Hier steht mein Inhalt',
comments:[{
author: 'Henning',
content: 'Scheiß blog'
},{
author:'Maike',
content: 'Guter Blog!'
},{
author:'Maike',
content: 'Guter Blog!'
}]
}],
},
methods:{
addNewBlog: function(blog){
let newBlog = {
title: blog.title,
content: blog.content
}
this.blogEntries.push(newBlog);
}
},
components:{
'my-blog': myBlogMainBody,
'my-comment': myCommentBody
}
});
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.js"></script>
<div id=app>
<my-blog v-for='blog in blogEntries'v-bind:blog='blog'>
<my-comment v-for='comment in blog.comments' v-bind:comment='comment'></my-comment>
</my-blog>
<create-blog-entry v-on:commit-new-blog='addNewBlog'></create-blog-entry>
</div>
<script type="text/javascript" src="myBlog.js"></script>
【问题讨论】:
-
你应该给每个博客和评论一个唯一的:key。这可以通过使用
<my-blog v-for='(blog, i) in blogEntries'v-bind:blog='blog' :key="blog-${i}">来完成。使用:key是v-bind:key的简写。 -
<td>{{comment.content}}</div>也不是有效的 HTML。 -
@SuperDJ 是的
<td>只是剩下的,但它不会改变结果。为什么我需要钥匙?即使我插入那个键它也不起作用.. -
我的回答应该能回答这个问题
标签: javascript html vue.js vue-component