我的服务器生成了以下代码:
<div id="app-4" data-server-rendered="true">
<ul>
<li>Article 1 test1</li>
<li>Article 2 test2</li>
</ul>
</div>
现在使用Vue.js,如果数据更改,我想再次生成此代码。那可能吗 ?
我试图做点什么,但是没有用:
var app4 = new Vue({
el: '#app-4',
props: ["todo"],
template: ' <ul>\n' +
' <li v-for="todo in todos">\n' +
' {{ todo.title }} {{ todo.text }}' +
' </li>\n' +
' </ul>',
data: {
todos: [
{ title: 'Article 3', text:"test1" },
{ title: 'Article 4', text:"test2" },
{ title: 'Article 5', text:"test3" }
]
}
})
从理论上讲,当我放置一个data.todos值与服务器生成的输出中的值不同时,它应该更改。但这和我的2 li在一起。如果删除data-server-rendered =“ true”,它将显示我的3 li。
最佳答案
我认为问题在于您正在尝试让Vue覆盖包含data-server-rendered
的标签。您想在其中补充水分。如果设置el: '#app-4'
(如您所做的那样),则会出现错误:
客户端渲染的虚拟DOM树不匹配
服务器呈现的内容。
如果在id="app-5"
中设置ul
并在Vue规范中使用el: '#app-5'
,则不会出现该错误,并且一切正常。
var app4 = new Vue({
el: '#app-5',
template: ' <ul>\n' +
' <li v-for="todo in todos">\n' +
' {{ todo.title }} {{ todo.text }}' +
' </li>\n' +
' </ul>',
data: {
todos: [
{ title: 'Article 3', text:"test1" },
{ title: 'Article 4', text:"test2" },
{ title: 'Article 5', text:"test3" }
]
}
});
<script src="//unpkg.com/vue@latest/dist/vue.js"></script>
<div id="app-4" data-server-rendered="true">
<ul id="app-5">
<li>Article 1 test1</li>
<li>Article 2 test2</li>
</ul>
</div>