Как назначить текущий элемент итерации для ngModel внутри pTemplate="header"
?
Я пытаюсь добиться этого в пользовательском интерфейсе
- Если установлены все флажки в столбце, флажок в заголовке также должен быть выбран.
- Если какой-либо флажок в столбце снят, соответствующий флажок заголовка столбца должен быть снят.
UI
HTML
<p-panel header='Table Layout and Cells Selection'>
<p-dataTable [value]="rowColumnData" *ngIf="renderCells" [scrollable]="true" scrollHeight="500px" frozenWidth="100px" unfrozenWidth="1750px"
[loading]="loading" loadingIcon="fa-spinner">
<!-- First column -->
<p-column [style]="{'width':'100px', 'background-color': 'rgb(235, 237, 240)', 'text-align': 'left'}" frozen="true">
<ng-template pTemplate="header">
<p-checkbox binary="true" label="All" [(ngModel)]="selectAll" (onChange)="selectAllCells($event)" *ngIf="renderCells"></p-checkbox>
</ng-template>
<ng-template let-row="rowData" pTemplate="body">
<p-checkbox binary="true" label={{row.ordrow}} [(ngModel)]="row.rowSelectAll" (onChange)='rowCheckboxSelectEvent(row, $event)'
pTooltip='{{row.ordrow}} - {{row.rowlabel}}'></p-checkbox>
</ng-template>
</p-column>
<!-- Reminaing columns-->
<p-column *ngFor="let col of columns; let i=index" [field]="col" [header]="col.ordcol" [style]="{'width':'75px', 'text-align': 'center'}">
<!-- Header checkbox -->
<ng-template pTemplate="header">
<p-checkbox binary="true" label={{col.ordcol}} [(ngModel)]="HOW_TO_MAP???" (onChange)='columnCheckboxSelectEvent(columns[i], $event)'
pTooltip={{col.collabel}}></p-checkbox>
</ng-template>
<!-- Cells checkboxes -->
<ng-template let-row="rowData" pTemplate="body">
<p-checkbox binary="true" [(ngModel)]="row.columns[i].selected" [disabled]="row.columns[i].disabled" [style]="{'backgroundColor':'grey'}"
(onChange)='cellsCheckboxEvent(i)' *ngIf="row.columns[i]"></p-checkbox>
</ng-template>
</p-column>
</p-dataTable>
</p-panel>
JSON
TypeScript - модель
// Model for Row and columns
export class RowColumn {
txstartdate: string;
txenddate: string;
reporttypecode: string;
templatecode: string;
tableversioncode: string;
tableid: number;
ordrow: string;
rowlabel: string;
iszaxisopen: string;
ordzaxis: string;
ordZLabel: string;
// Array of columns
columns: CellColumn[];
selected: boolean;
rowSelectAll: boolean;
columnSelectAll2: boolean; // I TRIED TO MAP THIS, BUT NOT WORKING !!
}
// Data point column
export class CellColumn {
dvstartdate: string;
dvenddate: string;
disabled: string;
ordcol: string;
isrowkey: string;
selected: boolean;
collabel: string;
// Array of Datapoint
datapoints: Datapoint[];
columnSelectAll: boolean;
}
export class Datapoint {
trcid: number;
datapointid: string;
constructor(trcid: number, datapointid: string) {
this.trcid = trcid;
this.datapointid = datapointid;
}
}