Réaliser la fonction :
1. Extension à une clé ou pliage à une clé du formulaire
2. Après avoir cliqué pour développer une partie du formulaire, cliquez à nouveau sur le bouton Développer ou Réduire pour développer ou réduire tout.
3. Le code complet est à la fin
1. Établir l'arborescence de el-table
1.ref="table", réalisé par liaison de nœud
2.data : données de l'arborescence
3.:tree-props="{ children: 'child', hasChildren: 'hasChildren' }", les enfants qu'il contient doivent automatiquement juger s'il existe une sous-structure appelée enfant dans les données et la remplir s'il y en a
4.row-key="id", valeur unique, doit
5.stripe, table de motif zébré
<el-table ref="table" :data="listData" :tree-props="{ children: 'child', hasChildren: 'hasChildren' }" row-key="id" stripe>
<el-table-column prop="name"></el-table-column>
</el-table>
2. données données
L'arborescence de base est terminée
listData: [
{
id: 1,
name: '张三',
age: 20,
child: [
{ id: 11, name: '子行1', age: 5 },
{ id: 12, name: '子行2', age: 8 }
]
},
{
id: 2,
name: '李四',
age: 25,
child: [
{ id: 4, name: '子行1', age: 5 },
{ id: 5, name: '子行2', age: 8 }
]
},
{
id: 3,
name: '王五',
age: 30,
child: [
{ id: 6, name: '子行1', age: 5 },
{ id: 7, name: '子行2', age: 8 }
]
},
{
id: 5,
name: '翠花',
age: 30
}
],
3. Ajoutez deux boutons, développez et réduisez
toggleRowExpansion : utilisé pour les tables extensibles et les tables arborescentes, pour basculer l'état d'expansion d'une ligne. Si le deuxième paramètre est utilisé, il sert à définir si la ligne est développée ou non (le premier paramètre est vrai pour développer)
Développez et pliez les opérations de manière récursive
<el-button size="mini" @click.native="openTable('open')">一键展开</el-button>
<el-button size="mini" @click.native="openTable('fold')">折叠</el-button>
isOpen: false
openTable(str) {
if (str == 'open') {
this.isOpen = true;
} else {
this.isOpen = false;
}
this.$nextTick(() => {
this.handleArr(this.listData, this.isOpen);
});
},
handleArr(arr, flag) {
arr.forEach(i => {
this.$refs.table.toggleRowExpansion(i, flag);
if (i.children) {
this.handleArr(i.children);
}
});
}
4. Effet
5. Code complet
<template>
<div class="content-box">
<div class="container">
<p>主体页面 2 - 3</p>
<el-button size="mini" @click.native="openTable('open')">一键展开</el-button>
<el-button size="mini" @click.native="openTable('fold')">折叠</el-button>
<el-table ref="table" :data="listData" :tree-props="{ children: 'child', hasChildren: 'hasChildren' }" row-key="id" stripe>
<el-table-column prop="name"></el-table-column>
</el-table>
</div>
</div>
</template>
<script>
export default {
data() {
return {
listData: [
{
id: 1,
name: '张三',
age: 20,
child: [
{ id: 11, name: '子行1', age: 5 },
{ id: 12, name: '子行2', age: 8 }
]
},
{
id: 2,
name: '李四',
age: 25,
child: [
{ id: 4, name: '子行1', age: 5 },
{ id: 5, name: '子行2', age: 8 }
]
},
{
id: 3,
name: '王五',
age: 30,
child: [
{ id: 6, name: '子行1', age: 5 },
{ id: 7, name: '子行2', age: 8 }
]
},
{
id: 5,
name: '翠花',
age: 30
}
],
isOpen: false
};
},
methods: {
openTable(str) {
if (str == 'open') {
this.isOpen = true;
} else {
this.isOpen = false;
}
this.$nextTick(() => {
this.handleArr(this.listData, this.isOpen);
});
},
handleArr(arr, flag) {
arr.forEach(i => {
this.$refs.table.toggleRowExpansion(i, flag);
if (i.children) {
this.handleArr(i.children);
}
});
}
}
};
</script>
<style lang="scss">
.customize-carousel .el-carousel__item h3 {
color: #475669;
font-size: 16px;
line-height: 150px;
margin: 0 50%;
}
.customize-carousel .el-carousel__item:nth-child(2n) {
background-color: #99a9bf;
}
.customize-carousel .el-carousel__item:nth-child(2n + 1) {
background-color: #d3dce6;
}
</style>
Ceci est la fin de l'article, j'espère qu'il vous sera utile ~