primeng表中的自定义过滤布尔值的问题

时间:2018-11-13 18:06:37

标签: angular typescript primeng primeng-datatable

我正在使用primeng表在Angular应用中显示数据, 我现在遇到的问题是我必须使用过滤器,但要有条件,例如,如果用户类型为0、1或2,则必须基于此显示数据,而我正在尝试的是此

        if(value == 0) {
            table.filter(value, fieldName, 'equals');
        } else if(value == 1) {
            table.filter(0, fieldName, 'gt');
            table.filter(false, 'array[0].fieldName',  'equals');
        } else if(value == 2) {
            table.filter(0, fieldName, 'gt');
            table.filter(true, 'array[0].fieldName',  'equals');
        }

如果用户键入0,则可以很好地进行过滤,但问题是当他键入1或2时,因为我必须从2个字段中进行过滤,所以我不确定我尝试执行的操作是否可以启动。

1 个答案:

答案 0 :(得分:1)

table.filter(...)处理单个列。

它旨在过滤特定列上的数据。以下是filter函数的类型定义:

filter(value: any, field: any, matchMode: any): void;

但是您走在正确的道路上,因为可以设置不同的过滤器,每列一个,然后与AND组合以过滤表的数据。

例如,以下功能可以使用多个列进行过滤:

filter(dt) {
  dt.filter('Blue', 'color', 'equals');
  dt.filter('Bmw', 'brand', 'equals');
}

这是模板的示例:

<p-table #dt [value]="cars">
  <ng-template pTemplate="header">
     <tr>
      <th>
        Color
      </th>
      <th>
        Brand
      </th>
     </tr>
   </ng-template>
   <ng-template pTemplate="body" let-car>
     <tr>
      <td>{{car.color}}</td>
      <td>{{car.brand}}</td>
     </tr>
   </ng-template>
</p-table>

<button (click)="filter(dt)">Get Blue Bmw</button>

以及完整的组件:

export class MyComponent {
  cars: {
    color: string;
    brand: string;
  }[];

  constructor() {
    this.cars = [{
      color: "blue",
      brand: "bmw"
    },{
      color: "red",
      brand: "bmw"
    }];
  }

  filter(dt) {
    dt.filter('Blue', 'color', 'equals');
    dt.filter('Bmw', 'brand', 'equals');
  }
}

该按钮会将过滤器应用于多列,从而产生数据  被color equals Blue AND brand equals Bmw过滤。

编辑:它对boolean的作用相同。

cars: {
  color: string;
  brand: string;
  enable: boolean;
}[];

filter(dt) {
  dt.filter('Blue', 'color', 'equals');
  dt.filter('Bmw', 'brand', 'equals');
  dt.filter(true, 'enable', 'equals');
}

由于引号,在您粘贴的'array[0].fieldName'代码中将其视为文字,因此它将查找字段名称“ array [0] .fieldName”,并且不对其进行求值。