TurboTable以编程方式选择/取消选择

时间:2018-09-27 13:28:40

标签: angular primeng primeng-turbotable

我有一个TurboTable定义,具有如下所示的复选框选择:

<p-table [columns]="cols" [value]="dataJSONArray" [paginator]="true" [rows]="10" [scrollable]="true"
  [(selection)]="dtSelectedRows" dataKey="OrderId">
  <ng-template pTemplate="colgroup" let-columns>
    <colgroup>
      <col style="width: 3em">
      <col *ngFor="let col of columns" [ngStyle]="{'width': col.widthPx + 'px'}">
    </colgroup>
  </ng-template>
  <ng-template pTemplate="header">
    <tr>
      <th>
        <p-tableHeaderCheckbox></p-tableHeaderCheckbox>
      </th>
      <th *ngFor="let col of cols">{{col.header}}</th>
    </tr>
  </ng-template>
  <ng-template pTemplate="body" let-rowData let-col>
    <tr [pSelectableRow]="rowData">
      <td>
        <p-tableCheckbox [value]="rowData"></p-tableCheckbox>
      </td>
...

如果我更改dtSelectedRows数组(选择),则什么都不会发生(dtSelectedRows数组更改,但选中的列不更改-stayched-):

this.dtSelectedRows.splice(indx, 1);

但是,如果我将一个数组分配给dtSelectedRows数组,更改将生效:

let dummySelectedRow = Object.assign([], this.dtSelectedRows);
dummySelectedRow.splice(indx, 1);
this.dtSelectedRows = dummySelectedRow;

1 个答案:

答案 0 :(得分:1)

在这种情况下,您需要将选择模式属性设置为singledtSelectedRows会影响对象理解所选值的数组。

  

<p-tableHeaderCheckbox></p-tableHeaderCheckbox>集   选择模式为multiple选择,   您可以解决,如果要支持单选模式,请使用p-tableRadioButton(单选按钮)

<p-table  [columns]="cols" [value]="data" [paginator]="true" [rows]="10" [scrollable]="true"
  [(selection)]="dtSelectedRows" >
  <ng-template pTemplate="header">
    <tr>
      <th>
      </th>
      <th *ngFor="let col of cols">{{col.header}}</th>
    </tr>
  </ng-template>
  <ng-template pTemplate="body" let-rowData let-col>
    <tr [pSelectableRow]="rowData">
       <td>
        <p-tableRadioButton [value]="rowData"></p-tableRadioButton>
      </td>
      <td *ngFor="let col of cols">{{rowData[col.field]}}<td>
    </tr>
  </ng-template>
</p-table>

通过方法设置所选项目

  setSelectedItem(){
    this.dtSelectedRows = this.data[0];
  }

如果要基于多种模式的条件删除项目

  removeUnvalidItem(){
    if (this.dtSelectedRows) {
      this.dtSelectedRows = this.dtSelectedRows.filter(car => car.year > 2005) 
    }
  }

stackblitz demo