antd 表格的一键展开 以及 节点的展开收起功能
html
<a-table
style="margin-top: 20px"
:columns="columns"
:data-source="dataSource"
bordered
rowKey="key"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
:expandedRowKeys="expandedRowKeys"
@expand="onExpand"
:expanded-keys="expandedKeys"
>
<span slot="action" slot-scope="text, record, index">
<a @click="reloadFn(record)">重置</a>
</span>
</a-table>
columns:[],
dataSource:[],
expandedRowKeys: [],
selectedRowKeys: [],
selectionRows: [],
expandedKeys: [],
递归方法 和展开收起事件
recursiveExpand(arr, tmp) {
for (let i = 0; i < arr.length; i++) {
tmp.push(arr[i].key)
if (arr[i].children !== null && arr[i].children !== undefined && arr[i].children.length > 0) {
this.recursiveExpand(arr[i].children, tmp)
}
}
return tmp
},
handleOPen(){
if(this.openStatus){
this.expandedRowKeys = [];
this.$emit('update:openStatus', false)
}else{
this.recursiveExpand(this.dataSource, this.expandedRowKeys)
this.$emit('update:openStatus', true)
}
},
onExpand(expandedKeys, record){
this.expandedKeys = expandedKeys
let arr = []
this.recursiveExpand([record], arr)
if(expandedKeys){
this.expandedRowKeys = this.expandedRowKeys.concat(arr)
}else {
arr.forEach(v => {
this.expandedRowKeys.splice( this.expandedRowKeys.indexOf(v),1)
})
}
},
onSelectChange(selectedRowKeys, selectedRows){
console.log(selectedRowKeys, selectedRows, 'onSelectChange事件')
this.selectedRowKeys = selectedRowKeys;
this.selectionRows = selectedRows;
},
总结:初始化的时候递归所有数据拿到key给expandedRowKeys赋值。收起清空。
点击节点的时候删除或增加expandedRowKeys里面的key数据(onExpand方法)。