Angular 2

时间:2017-03-26 08:07:44

标签: angular

我正在开发Angular 2.在我的一个场景中,我必须为一个DataTable添加多个过滤器。我为我的项目创建了自定义DataTable。
过滤器如: enter image description here

在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);
    }

请注意:该表是动态的,表示字段可以是任何不固定的。

1 个答案:

答案 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 
})

我希望这会有所帮助