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" и не оценивает его.