我正在开发Angular 2.在我的一个场景中,我必须为一个DataTable添加多个过滤器。我为我的项目创建了自定义DataTable。
过滤器如:
在google上搜索并在stackoverflow上查看答案后,我发现了这个Plunker https://plnkr.co/edit/e0PCIsqXumbXe6mAUWBI?p=preview
我的代码和plunker一样但不适合我。
我的代码:
管:
transform(items: Array<any>, filter: {[key: string]: any }): Array<any> {
return items.filter(item => {
let notMatchingField = Object.keys(filter)
.find(key => item[key] !== filter[key]);
return !notMatchingField; // true if matches all fields
});
}
组件Html:
<tr *ngFor="let item of dataresult | jbgridfilter: filterItems | orderBy : [orderbyKey, 'ID'] | paginate: { itemsPerPage: numOfPages, currentPage: p }"
(click)="showRowDetails(item)">
<td *ngFor="let key of keysArray;"><span>{{item[key]}}</span></td>
<tr>
组件类:
valueForFilter(key, event) {
let item = {key: event};
this.filterItems.push(item);
}
请注意:该表是动态的,表示字段可以是任何不固定的。
答案 0 :(得分:1)
我已经在这里更新了plunker https://plnkr.co/edit/sJD1uQpkyBojzzt8nUps?p=preview
在valueForFilter中,filterItems是一个对象而不是一个数组(至少在plunker示例中),所以push不会为你工作。
updateFilter(key,value){
this.peopleFilter[key] = value;
}
此外,您需要将piple设置为不纯
@Pipe({
name: 'filter'
pure: false
})
我希望这会有所帮助