<template>
<el-table ref="table" :data="tableData" :row-key="getRowKey" :expand-row-keys="expandRowKeys" @expand-change="handleExpandChange">
<el-table-column type="expand" fixed>
<template slot-scope="scope">
<el-table :ref="`expandTableRef${scope.$index}`" :data="scope.row.expandTableData">
<el-table-column label="年龄" prop="age"></el-table-column>
</el-table>
</template>
</el-table-column>
<el-table-column label="姓名" prop="name"></el-table-column>
</el-table>
</template>
<script>
export default {
data() {
tableData: [{ name: '张三' }],
// 获取row的key值
getRowKey(row) {
return row.id; // 返回当前行id
},
// 要展开的行,数值的元素是row的key值
expandRowKeys: []
},
methods: {
// 表格展开回调
handleExpandChange(row, expandRow) {
// 如果当前展开行数组的长度为0,将expandRowKeys置空
if(!expandRow.length) {
this.expandRowKeys = [];
return;
}
// expandRowKeys置空,把当前所有展开行的id push进数组
this.expandRowKeys = [];
expandRow.forEach(item => {
this.expandRowKeys.push(item.id);
});
// 判断是否关闭当前行,关闭则不调接口
if (expandRow.indexOf(row) == -1) {
// 将展开行表格数据置空,防止下一次展开后有上次遗留数据
row.expandTableData = [];
return;
}
// 调接口
···
// 把接口返回数据赋给当前行expandTableData,作为展开子表格的数据
row.expandTableData = d.data;
// 强制刷新,解决第一次展开不显示数据的问题
row.expandTableData.slice(0);
···
},
}
}
</script>