ant-design嵌套子表格实现每次只展开一个子表格(点击新的子表格收起原展开的子表格)

本文介绍了如何在Ant Design中实现表格功能,每次点击新的子表格会自动收起之前展开的子表格。关键在于利用`expandedRowKeys`属性控制展开的行,并在`onExpandedRowsChange`事件中更新`expandedRowKeys`的值,确保只保留最新展开的子表格。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

又遇到问题,记录一下吧,希望给同踩坑的小白一些帮助

首先功能需求:点击新的子表格收起原展开的子表格

解决问题的关键点:重新set  expandedRowKeys的值

这个解决问题的点大家都能想到,主要是在什么时候去set这个值

 

下边是API里边的描述,我们使用这个参数就可以解决问题了

onExpandedRowsChange 展开的行变化时触发 function(expandedRows)
expandedRowKeys 展开的行,控制属性 string[]

 

首先初始设置一个expandedRowKeys的初始值,我这里用的hook

const [expandedRowKeys,setExpandedRowKeys] = useState([''])     //  这里注意一下expandedRowKeys需要的时string[],我这里是默认全部收起的

然后是table组件中

<Table

    dataSource={ {datasource}}

    expandable={ {

        onExpand={ {(expanded,record)=>onExpand(expanded,record)}}&nbs

### 实现带有垂直列标题的嵌套子表格 为了实现Ant Design Vue 中创建带有垂直列标题的嵌套子表格,可以按照以下方法操作: #### 使用 `expandedRowKeys` 和 `expand` 控制展开状态 通过设置 `expandedRowKeys` 来控制哪些行被展开,并利用组件提供的 `expand` 方法来处理用户的交互行为[^1]。 ```javascript // JavaScript部分 export default { data() { return { expandedRowKeys: [], // 存储当前已展开的行键值数组 columns: [ { title: 'Name', dataIndex: 'name' }, { title: 'Age', dataIndex: 'age' } ], data: [...], // 父表数据源 innerColumns: [{title:'Child Name', dataIndex:'childName'}], innerData:[...] // 子表数据源 }; }, methods:{ onExpand(expanded, record){ this.expandedRowKeys = expanded ? [record.key] : []; } } } ``` #### 设置子表格样式以实现垂直显示列头 对于希望子表格内的某些特定列呈现为纵向布局的情况,则可以通过 CSS 自定义样式来进行调整。这里给出一种简单的解决方案——旋转文字方向并改变单元格宽度使其适应新布局的需求[^2]。 ```css /* 添加至全局或局部CSS文件 */ .components-table-demo-nested .ant-table-thead>tr>th.vertical-column{ writing-mode: vertical-lr; white-space: nowrap; padding:0px !important; } .components-table-demo-nested td[colspan="auto"]{ /* 针对跨多列情况下的特殊处理*/ text-align:center; } ``` #### HTML模板结构 最后,在HTML模板中应用上述配置好的属性以及类名即可完成整个功能模块的设计. ```html <a-table :columns="columns" :data-source="data" :expanded-row-keys.sync="expandedRowKeys" @expand="onExpand"> <!-- 定义父级表格的操作按钮 --> <template slot="operation" slot-scope="text">{{text}}</template> <!-- 渲染子表格 --> <a-table v-if="expandedRowKeys.length > 0 && expandedRowKeys.includes(record.key)" slot="expandedRowRender" slot-scope="record" :columns="innerColumns.map(col => ({...col, className: col.title === 'Child Name'? 'vertical-column': ''}))" :data-source="innerData.filter(item=>item.parentId===record.id)" :pagination="false"/> </a-table> ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值