Utilisez la table Table du composant Element lorsque vous utilisez des données d'arborescence et faites correspondre la zone de sélection multiple, comme suit :
Il y aura un problème, cliquez en haut à gauche pour tout sélectionner, seul le premier niveau de nœuds d'arborescence peut être sélectionné et les nœuds enfants ne peuvent pas être sélectionnés, comme le montre la figure :
Si vous souhaitez sélectionner toutes les tables en cliquant sur Sélectionner tout, vous devez trouver un autre moyen, la méthode est la suivante :
1. Définissez d'abord une méthode pour la table ref
,
2. Liez une @select-all
méthode ;
3. Définissez une variable pour identifier si la zone de sélection complète est sélectionnée et si la valeur par défaut est désélectionnée ;
checkedKeys: false,
4. @select-all
La méthode de liaison est la suivante. Dans le tableau Table de l'élément, select-all
cela signifie que l'événement est déclenché lorsque l'utilisateur coche manuellement toutes les cases à cocher. Chaque fois que l'utilisateur clique, les clés vérifiées sont inversées et la boucle foreach est effectuée. sur les données du tableau pour cocher la case multi-sélection/ Le code clé à décocher est :
this.$refs.multipleTable.toggleRowSelection(row, flag);
la case flag=true est cochée, flag=false n'est pas cochée.
Cette méthode n'affectera pas @selection-change
la méthode de liaison, si l'état est tous sélectionné, vous pouvez obtenir toutes les données sélectionnées.
La capture d'écran du code est la suivante :
L'ensemble du code est le suivant :
<template>
<div>
<h1>树型数据+表格</h1>
<el-table :data="tableData" style="width:80%;margin: 100px;" row-key="id" border default-expand-all
@select-all="selectAll" ref="multipleTable" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55">
</el-table-column>
<el-table-column prop="date" label="日期" sortable width="180">
</el-table-column>
<el-table-column prop="name" label="姓名" sortable width="180">
</el-table-column>
<el-table-column prop="address" label="地址" width="380">
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
nama: "Tree",
data() {
return {
checkedKeys: false,
tableData: [
{
id: 1,
date: "2016-05-02",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄",
children: [],
},
{
id: 2,
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1517 弄",
},
{
id: 3,
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄",
children: [
{
id: 31,
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄",
},
{
id: 3531,
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄",
},
{
id: 8931,
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄",
},
{
id: 32,
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄",
children: [
{
id: 61,
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄",
},
{
id: 42,
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄",
children: [
{
id: 321,
date: "2016-05-01",
name: "王小虎33333",
address: "上海市普陀区金沙江路 1519 弄",
},
],
},
],
},
],
},
{
id: 4,
date: "2016-05-03",
name: "王小虎",
address: "上海市普陀区金沙江路 1516 弄",
},
],
};
},
methods: {
selectAll() {
this.checkedKeys = !this.checkedKeys;
this.splite(this.tableData, this.checkedKeys);
},
/**
* 处理数据
*/
splite(data, flag) {
data.forEach((row) => {
this.$refs.multipleTable.toggleRowSelection(row, flag);
if (row.children != undefined) {
this.splite(row.children);
}
});
},
handleSelectionChange(val){
console.log(val);
}
}
};
</script>
La méthode ci-dessus ne peut être utilisée que pour tout sélectionner, si le parent est sélectionné, l'enfant ne sera pas sélectionné
La méthode suivante consiste à sélectionner le parent et l'enfant peut être sélectionné, mais toutes les sélections ne peuvent pas être utilisées
<template>
<div>
<el-table
v-if="deptList.length > 0"
v-loading="loading"
:data="deptList"
row-key="id"
:default-expand-all="isExpandAll"
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
@select-all="selectAll"
ref="multipleTable"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" :selectable="row => !row.disabled">
<template slot-scope="scope">
<el-checkbox v-model="scope.row.selected" @change="onRowSelectChange(scope.row)"></el-checkbox>
</template>
</el-table-column>
<!-- 其他列定义 -->
</el-table>
</div>
</template>
<script>
export default {
data() {
return {
deptList: [],
loading: false,
isExpandAll: false,
checkedKeys: false
};
},
methods: {
selectAll() {
this.checkedKeys = !this.checkedKeys;
this.splite(this.deptList, this.checkedKeys);
},
splite(data, flag) {
data.forEach((row) => {
this.$refs.multipleTable.toggleRowSelection(row, flag);
if (row.children && row.children.length) {
this.splite(row.children, flag);
}
});
},
onRowSelectChange(row) {
if (row.children && row.children.length > 0) {
this.traverse(row.children, row.selected);
}
},
traverse(data, checked) {
data.forEach((row) => {
this.$set(row, 'selected', checked);
if (row.children && row.children.length > 0) {
this.traverse(row.children, checked);
}
});
},
// 其他方法
}
};
</script>