【发布时间】:2021-12-09 08:47:35
【问题描述】:
我已经嵌套了想要以表格格式显示的数据。这是一些示例数据;在实际应用中,rows 中有时可能会有几十个条目。
<script>
export default {
name: 'Example',
data () {
return {
results: [
{ a: 'AAA', rows: { BBB: 'CCC' } },
{ a: 'D', rows: { E: 'F', G: 'H' } },
{ a: 'Tom, Dick & Harry', rows: { x: 'y' } },
],
}
},
}
</script>
注意:内部值('CCC'、'F'、'H'、'y')可能最终会成为进一步嵌套的数组或对象。
我尝试了这种网格布局,带有v-for 循环:
<template>
<div style="width:100%">
<div v-for="(res,key) in results" :key="key" class="results">
<div class="A">{{res.a}}</div>
<div v-for="(c,b) in res.rows" :key="b">
<div class="B">{{b}}</div>
<div class="C">{{c}}</div>
</div>
</div>
</div>
</template>
<style scoped>
.results {display:grid;grid-template-columns: 1fr 1fr;}
.A {font-weight:bold;grid-column:1/3;}
.B {grid-column:1;padding:0.5rem;}
.C {grid-column:2;padding:0.5rem;}
</style>
(顺便说一句:更合乎逻辑的grid-column:1/2,要获得两列的跨度,似乎什么都不做......)
这给了我错误的布局;我已经附加了一个很好的老式表格布局来展示我想要实现的目标(问题结束时的 HTML)。
我有一个简单的错误吗?或者,有没有更好的方法来同时使用 vue 和 grid? (请记住,如上所述,我最终可能会使用第三个 v-for 循环。)
顺便说一句,上次我尝试使用网格我放弃了,并使用了<table>标签;我通过将<tbody> 放在<tbody> 上来解决v-for 创建html 标签的问题,即每个部分都有一个表格正文。但这不会扩展到第三个 v-for 循环。如果可以的话,我宁愿使用 CSS 网格,因为它为响应式布局提供了更多功能。
表格HTML,供参考:
<table border="1" cellspacing=0 style="width:100%;">
<tr>
<td colspan="2"><b>AAA</b></td>
</tr>
<tr>
<td>BBB</td>
<td>CCC</td>
</tr>
<tr>
<td colspan="2"><b>D</b></td>
</tr>
<tr>
<td>E</td>
<td>F</td>
</tr>
<tr>
<td>G</td>
<td>H</td>
</tr>
<tr>
<td colspan="2"><b>Tom, Dick & Harry</b></td>
</tr>
<tr>
<td>x</td>
<td>y</td>
</tr>
</table>
【问题讨论】: