我正在使用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个字段中进行过滤,所以我不确定我尝试执行的操作是否可以启动。
答案 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”,并且不对其进行求值。