我正在使用priming Table在我的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个字段进行筛选,我不确定我试图在priming中做什么是否可行。
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');
}
}
该按钮将在多个列上应用过滤器,从而产生数据用CCD_ 4 AND
CCD_。
编辑:它对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",而不会对其求值。