angular - 具有角材料的多个过滤器
问题描述
我正在使用 Angular 材料进行造型的 Angular 8 项目。我使用了带有过滤器的 mat-table 来过滤 mat-table 中的数据。默认的 mat-table 过滤器过滤包含输入字符的数据。但我想一次使用两个过滤器和 mat-table,即默认过滤器和一个按域(表中的列)过滤器,它将使用下拉列表进行过滤。经过研究,我发现我可以通过定义一个 filterPredicate 来使用列过滤数据,该 filterPredicate 需要一个列进行过滤,但是有什么方法可以同时使用默认过滤器和列过滤器?
下面是我的过滤代码和截图
applyFilter(filterValue: string) {
if (this.search) {
this.domainSelect = '';
}
this.dataSource.filter = filterValue.trim().toLowerCase();
}
// Below method is in complete and will be implemented for Domain Filter
applyDomainFilter(filterValue: string) {
filterValue = filterValue.trim().toLowerCase();
this.dataSource.filter = filterValue;
}
谢谢
解决方案
我总是使用一种方法来设置由字符串类型确定的多个过滤器。
applyFilter(value: any, type: string) {
switch(type) {
case 'name':
this.filterObject.name = value;
break;
case 'domain':
this.filterObject.domain = value;
break;
default:
break;
}
this.dataSource.filter = JSON.stringify(this.filterObject);
}
在我的过滤谓词中,您可以决定是否要完全匹配所有过滤器或至少一个过滤器。我总是将过滤器与逻辑AND
.
this.dataSource.filterPredicate = (obj, filterStr) => {
let filterObj = JSON.parse(filterStr);
if(obj.name.toLowerCase().includes(filterObj.name.toLowerCase()) && obj.domain.toLowerCase().includes(filterObj.domain.toLowerCase())) {
return true;
} else {
return false;
}
}
推荐阅读
- java - 任务在android studio中不成功
- css - Internet Explorer 显示网格和网格模板列
- android - setItemClickListener 不工作
- mysql - 如何在 MySQL 中将 IFNULL 与窗口函数一起使用
- c# - 手动填写 C# 数据类型集合列表
- python - 在 Spyder (python 3.6) 中导入 pandas_datareader
- javascript - 当玩家悬停在球上时,如何从 HTML-5 画布中正确移除球?
- python - Python3变量增量和赋值
- javascript - 如何检查标签之间的值是否未更改
- apache-spark - 将 Dstream 转换为 DataFrame