Angular6:筛选与属性匹配的列表元素

时间:2018-09-20 15:02:25

标签: angular list filter pipe

我想通过仅显示具有特定 groupId items 来过滤角度表的 dataSource >属性。

component.html

 <mat-table [dataSource]="groupSource |  filter : currentGroupId"></mat-table>

filter.pipe.ts

import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
  name: 'filter'
})
// return items of a group
export class FilterPipe implements PipeTransform {

  transform(group: any[], currentGroupId: number): any[] { 

    return group.filter( item=> item.groupId = currentGroupId);

    }
}

但是,我收到此错误:

  

错误TypeError:group.filter不是函数
      在FilterPipe.push ../ src / app / filter.pipe.ts.FilterPipe.transform(filter.pipe.ts:9)
      在checkAndUpdatePureExpressionInline(core.js:9949)
      在checkAndUpdateNodeInline(core.js:10518)
      在checkAndUpdateNode(core.js:10476)
      在debugCheckAndUpdateNode(core.js:11109)上
      在debugCheckDirectivesFn(core.js:11069)
      at Object.eval [作为updateDirectives](BasketComponent.html:144)
      at Object.debugUpdateDirectives [作为updateDirectives](core.js:11061)
      在checkAndUpdateView(core.js:10458)
      在callViewAction(core.js:10699)

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

问题出在相等性检查中。应该是

 return group.filter( item=> item.groupId === currentGroupId);

答案 1 :(得分:0)

当您提供的数据源很可能不是数组的MatTableDataSource实例时,您尝试在Array上使用filter方法。实际上,MatTableDataSource具有应该是字符串的filter属性。

但是,您将要使用MatTableDataSource的filterPredicate函数。

Read the documentation for the correct way to filter a Material data source.