primeng Table 中自定义过滤布尔值的问题
Issues in custom filtering boolean value in primeng Table
我正在使用 primeng 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 个字段中过滤,我不确定我想做的事情在 primeng 中是否可行。
table.filter(...)
适用于单个列。
它旨在过滤特定列上的数据。下面是filter
函数的类型定义:
filter(value: any, field: any, matchMode: any): void;
但是你走在正确的道路上,因为可以设置不同的过滤器,每列一个,然后与 AND
组合以过滤 table 的数据。
例如,以下函数可以使用多列进行过滤:
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" 并且不会对其求值。
我正在使用 primeng 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 个字段中过滤,我不确定我想做的事情在 primeng 中是否可行。
table.filter(...)
适用于单个列。
它旨在过滤特定列上的数据。下面是filter
函数的类型定义:
filter(value: any, field: any, matchMode: any): void;
但是你走在正确的道路上,因为可以设置不同的过滤器,每列一个,然后与 AND
组合以过滤 table 的数据。
例如,以下函数可以使用多列进行过滤:
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" 并且不会对其求值。