You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:15:02