在Web開(kāi)發(fā)中,我們經(jīng)常需要使用表格(Table)展示數(shù)據(jù)。對(duì)于大量數(shù)據(jù)的表格,合理的折疊展示方式不僅能夠節(jié)省頁(yè)面空間,還可以方便用戶(hù)查看具體內(nèi)容。本文將詳細(xì)介紹如何使用Vue實(shí)現(xiàn)Table的折疊展示功能。
<template>
<div>
<table>
<thead>
<tr>
<th>姓名</th>
<th>年齡</th>
<th>性別</th>
</tr>
</thead>
<tbody>
<tr v-for="item in data" :key="item.id">
<td>{{ item.name }}</td>
<td>{{ item.age }}</td>
<td>{{ item.gender }}</td>
<td><span @click="toggle(item)">{{ item.isShow ? '隱藏' : '展開(kāi)' }}</span></td>
</tr>
<tr v-if="!data.length">
<td colspan="4">暫無(wú)數(shù)據(jù)</td>
</tr>
</tbody>
</table>
</div>
</template>
以上是Table的模板代碼,其中使用了v-for循環(huán)渲染數(shù)據(jù),并且使用了自定義指令v-loading展示加載中的效果。每一行的數(shù)據(jù)中,多了一個(gè)“展開(kāi)”或“隱藏”的按鈕,這個(gè)按鈕的點(diǎn)擊事件對(duì)應(yīng)toggle方法。
export default {
data () {
return {
data: [] // 存放表格數(shù)據(jù)的數(shù)組
}
},
methods: {
toggle (item) {
item.isShow = !item.isShow;
}
},
async created () {
try {
const res = await axios.get('http://xxx.com/api/table');
this.data = res.data;
} catch (err) {
console.log(err);
}
}
}
在以上代碼中,我們定義了數(shù)據(jù)data,并且編寫(xiě)了toggle方法。toggle方法中會(huì)改變每一個(gè)數(shù)據(jù)項(xiàng)中的isShow屬性,從而控制該行數(shù)據(jù)的展開(kāi)和收起。在created生命周期鉤子中,我們使用異步請(qǐng)求加載真實(shí)數(shù)據(jù)。
.isShow {
display: none;
}
為了實(shí)現(xiàn)展開(kāi)和收起的效果,我們需要定義一個(gè)CSS類(lèi)樣式:isShow。在該樣式中,設(shè)置display屬性為none可以隱藏該行的所有數(shù)據(jù)內(nèi)容。
.isShow td {
padding: 0!important;
border: none!important;
}
該樣式定義了所有td元素都不要設(shè)置邊框,并且padding為0,從而實(shí)現(xiàn)隱藏的效果。
:nth-of-type(-n+3) {
display: table-cell;
background: #f5f5f5;
}
:nth-of-type(n+4) {
display: none;
}
最后,我們需要定義展開(kāi)和收起后的樣式效果,來(lái)實(shí)現(xiàn)折疊和展開(kāi)的效果。我們使用CSS的nth-of-type選擇器來(lái)選擇行中的第4行到最后一行:
當(dāng)行的isShow值為真時(shí),顯示所有的td元素,并且背景設(shè)置成灰色;當(dāng)行的isShow值為假時(shí),隱藏這些td元素。
代碼實(shí)現(xiàn)完成之后,我們可以通過(guò)在table數(shù)據(jù)中控制isShow屬性,來(lái)實(shí)現(xiàn)Table的展開(kāi)和收起效果。該方法不僅可以用于Table組件,還可以應(yīng)用在其他需要折疊或展開(kāi)內(nèi)容的組件中。