我在我的 Angular JS 应用程序中使用 PrimeNG Ultima 主题。我有如下所示的数据表,其中包含多项选择和行分组。
<p-dataTable #restrictionDT
[value]="apprestrictions"
selectionMode="multiple"
[(selection)]="selectedApprestrictions"
sortField="belongsTo"
rowGroupMode="subheader"
groupField="belongsTo"
expandableRowGroups="false"
[responsive]="true">
<ng-template pTemplate="rowgroupheader" let-rowData>
{{rowData['belongsTo']}}
</ng-template>
<p-column selectionMode="multiple"></p-column>
<p-column field="id" header="ID"></p-column>
<p-column field="name" header="Name"></p-column>
<p-column field="displayBelongsTo" header="Belongs To"></p-column>
</p-dataTable>
我可以看到我的数据表,如下所示。我可以选择单个行,可以选择多行,如果我选中顶部的复选框,我也可以选择所有行。
我们需要对行进行分组,我也可以这样做。我们的要求是在行组标题中我们需要添加复选框,以便如果用户选中该复选框,则必须选中属于该行组的行。例如,在我的数据表中,我将在 A1 旁边添加复选框。如果选中,则必须选择 ID 为 1 和 5 的两行,但不能选择其他行。
我已经联系了 PrimeNG 团队,他们说现在 p-datatable 将不支持我们想要的。所以我想看看我能做什么。从调试中我注意到每一行都有 p-dtcheckbox 和 ng-reflect-checked 将在检查时为真,否则为假。所以我试图在我的打字稿代码中设置它。谁能告诉我如何做到这一点。
请在下面查看我的代码
import { Component, OnInit, ViewChild, OnDestroy, ElementRef } from '@angular/core';
@ViewChild('restrictionDT') restrictionDT: ElementRef;
console.log(this.restrictionDT);
console.log(this.restrictionDT) 效果很好,我可以在浏览器控制台中看到数据表。但是 this.restrictionDT.nativeElement 是未定义的,所以我被卡住了
更新 我做了以下更改,现在可以在我的控制台日志中看到 p-datatable。现在我想为特定行组循环每一行并选择复选框。
@ViewChild('restrictionDT') restrictionDT: any;
console.log(this.restrictionDT.el.nativeElement);
解决方案 :
我能够解决这个问题。数据表有一个名为 selection 的属性,它绑定到您的 component.ts 文件中的一个属性,该属性是数组类型。只需将元素添加到您想要选择的那个数组中。就是这么简单。
<p-dataTable [value]="apprestrictions" selectionMode="multiple" [(selection)]="selectedApprestrictions"
在您的 component.ts 中执行此操作
selectedApprestrictions: AppRestriction[] = [];
this.selectedApprestrictions.push({ id: 1, name: 'Restriction 1', belongsTo: 'A1', belongsToIndicator: ['A'], displayBelongsTo: 'A1' });
this.selectedApprestrictions.push({ id: 5, name: 'Restriction 5', belongsTo: 'A1', belongsToIndicator: ['A, S'], displayBelongsTo: 'A1' });