use*_*803 8 html-table rows vue.js v-for
Vue 2,没有网络包.我想一次渲染两个trs,用于main和detail可扩展行.这就是我想要实现的目标:
<table>
<tbody>
<div v-for="item in items">
<tr></tr>
<tr class="detail-row"></tr>
</div>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
问题是<div>
tbody是一个无效的孩子.如何<tr>
在每个循环迭代中渲染两个s?
Ber*_*ert 17
这是您在支持的浏览器中解决它的方式template
.
<table>
<tbody>
<template v-for="item in items">
<tr></tr>
<tr class="detail-row"></tr>
</template>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
如果您需要支持那些浏览器不支持template
,我通常采取渲染功能.
以下是两者的实例.
console.clear()
new Vue({
el: "#app",
data: {
items: [{
master: "Master",
detail: "Detail"
},
{
master: "Master",
detail: "Detail"
},
]
}
})
new Vue({
el: "#app2",
data: {
items: [{
master: "Master",
detail: "Detail"
},
{
master: "Master",
detail: "Detail"
},
]
},
render(h){
// build the rows
let rows = []
for (let item of this.items){
rows.push(h("tr", [h("td", [item.master])]))
rows.push(h("tr", {class: "detail-row"}, [h("td", [item.detail])]))
}
// add rows to body
let body = h("tbody", rows)
// return the table
return h("table", [body])
}
})
Run Code Online (Sandbox Code Playgroud)
.detail-row{
background-color: lightgray;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.13/vue.js"></script>
<h2>Using template</h2>
<div id="app">
<table>
<tbody>
<template v-for="item in items">
<tr><td>{{item.master}}</td></tr>
<tr class="detail-row"><td>{{item.detail}}</td></tr>
</template>
</tbody>
</table>
</div>
<h2>Using render function</h2>
<div id="app2"></div>
Run Code Online (Sandbox Code Playgroud)
在较新版本的 VueJS 中,它需要一个索引。所以解决方案看起来像
<table>
<tbody>
<template v-for="(item, index) in items">
<tr :key="index">
<td>{{item.master}}</td>
</tr>
<tr :key="index" class="detail-row">
<td>{{item.detail}}</td>
</tr>
</template>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6231 次 |
最近记录: |