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

Angular 12 PrimeNG表格头部checkbox实现全选(不使用内置selection)

PrimeNG Table自定义全选功能实现方案

改动步骤

1. 组件TS文件补充逻辑

先声明所需变量,再实现全选和单行校验方法:

// 已选中的行ID集合
selectedLeaves: number[] = [];
// 头部全选框的选中状态
isAllSelected: boolean = false;
// 表格数据源(原有逻辑已存在的话可忽略重复声明)
value: any[] = [];

/**
 * 头部全选框触发方法
 * @param checked 全选框当前是否选中
 */
allSelect(checked: boolean): void {
  this.isAllSelected = checked;
  this.selectedLeaves = checked ? this.value.map(item => item.id) : [];
}

/**
 * 单行选中状态变更时触发,自动同步全选框状态
 */
onRowSelectChange(): void {
  this.isAllSelected = this.value.length > 0 && this.selectedLeaves.length === this.value.length;
}

2. 调整模板绑定逻辑

修改头部全选checkbox绑定

把原有头部checkbox的代码替换为以下内容,移除错误的value绑定,改为绑定全选状态:

<th *ngIf="status!='all'" style="width: 40px" pFrozenColumn class="border-right-none">
  <p-checkbox [(ngModel)]="isAllSelected" (onChange)="allSelect($event.checked)"></p-checkbox>
</th>

修改行checkbox绑定

给行checkbox补充状态变更事件,同时修正inputId为唯一值,避免多个复选框共用同一个id导致的点击异常:

<td  *ngIf="status!='all'" style="width: 40px" pFrozenColumn class="border-right-none">
  <div *ngIf="status!='all'">
    <p-checkbox 
      name="group1" 
      value="{{leave.id}}" 
      [(ngModel)]="selectedLeaves" 
      [inputId]="'ch-' + leave.id"
      (onChange)="onRowSelectChange()"
    ></p-checkbox>
  </div>
</td>

注意说明

  • 上述逻辑默认仅选中当前分页的表格行,如果你需要跨分页全选,只需把allSelect方法中赋值selectedLeaves的数据源替换为全量数据的ID集合即可
  • 需确保表格每一行数据都存在唯一的id字段,和value属性绑定的ID保持一致

内容的提问来源于stack exchange,提问作者Damith F'do

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:45:03