PrimeNG表格行展开功能异常:dataKey配置不当导致无法正常单行展开
问题根因及修复方案
1. 核心错误:行展开触发器绑定错误
父表格的展开按钮[pRowToggler]错误绑定了columns,PrimeNG行展开触发器需要绑定当前行数据对象,组件才能通过dataKey匹配唯一行,实现单行展开。
修复代码:
<!-- 原错误写法 --> <button type="button" pButton pRipple [pRowToggler]="columns" class="p-button-text p-button-rounded p-button-plain" [icon]="expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'"></button> <!-- 修改为绑定当前行数据 --> <button type="button" pButton pRipple [pRowToggler]="rowData" class="p-button-text p-button-rounded p-button-plain" [icon]="expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'"></button>
2. dataKey配置修正
接口返回的mUnit数组中每一项的顶层字段就是id的话,dataKey="id"的配置是完全正确的。之前点一行全展开的问题,是因为给pRowToggler传了所有行共享的公共值,导致所有行的匹配标识一致,触发展开时全部命中。
注意:确保
mUnit数组中每一项的id值唯一,重复id也会导致多行同时展开。
3. 行展开区域子表格配置错误
当前行展开区域的子表格[value]绑定了全局的mUnit,会导致每一行展开后都显示全量列表,不符合嵌套表格使用逻辑。应绑定当前行对应的子数据,比如行数据里存储子列表的字段rowData.subList:
<!-- 原错误写法 --> <p-table [value]="mUnit" dataKey="id"> <!-- 修改为绑定当前行的子数据,无嵌套数据需求可直接删除子表格代码 --> <p-table [value]="rowData.subList" dataKey="id">
4. 其他语法错误修正
子表格body的(click)="showIt(rowData)"写在了tr标签外,属于无效代码,需要移入tr标签内部:
<!-- 错误写法 --> <tr> (click)="showIt(rowData)" <td>...</td> </tr> <!-- 修正写法 --> <tr (click)="showIt(rowData)"> <td>...</td> </tr>
完成以上修改后,单行展开功能即可正常生效。
内容的提问来源于stack exchange,提问作者Dawood Sherazi
相关产品推荐
相关产品推荐

