Сделать компонент, предназначенный для отображения одного элемента массива (т.е., одного вложенного массива). Корневым узлом будет
tbody
- их в таблице может быть несколько. Нулевой элемент переданного массива отображается всегда, а остальные по условию. Как-то так:
props: [ 'items' ],
data: () => ({
showAll: false,
}),
<tbody>
<tr>
<td>{{ items[0] }}</td>
<td>
<button
v-if="items.length > 1"
v-text="showAll ? '-' : '+'"
@click="showAll = !showAll"
></button>
</td>
</tr>
<template v-if="showAll">
<tr v-for="n in items.slice(1)">
<td>{{ n }}</td>
<td></td>
</tr>
</template>
</tbody>
Ну и создаёте столько экземпляров этого компонента, сколько в массиве элементов:
<table>
<v-tbody v-for="n in items" :items="n" />
</table>
https://jsfiddle.net/vx3k8bsh/