- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我一直在尝试应用多列过滤,即列标题中的文本输入将仅过滤列的内容。到目前为止,我已经能够通过覆盖 filterPredicate
的 MatTableDataSource
但是一旦我覆盖了跨列的默认过滤就不再有效。
export class TableFilteringExample implements OnInit
{
displayedColumns: string[] = ['position', 'name', 'weight', 'symbol'];
dataSource = new MatTableDataSource(ELEMENT_DATA);
positionFilter = new FormControl();
nameFilter = new FormControl();
filteredValues =
{
position: '',
name: '',
weight: '',
symbol: ''
};
ngOnInit()
{
this.positionFilter.valueChanges.subscribe((positionFilterValue) =>
{
this.filteredValues['position'] = positionFilterValue;
this.dataSource.filter = JSON.stringify(this.filteredValues);
});
this.nameFilter.valueChanges.subscribe((nameFilterValue) =>
{
this.filteredValues['name'] = nameFilterValue;
this.dataSource.filter = JSON.stringify(this.filteredValues);
});
this.dataSource.filterPredicate = this.customFilterPredicate();
}
applyFilter(filterValue: string)
{
this.dataSource.filter = filterValue.trim().toLowerCase();
this.dataSource.filter = filterValue;
}
customFilterPredicate()
{
const myFilterPredicate = function(data: PeriodicElement, filter: string): boolean
{
let searchString = JSON.parse(filter);
return data.position.toString().trim().indexOf(searchString.position) !== -1 && data.name.toString().trim().toLowerCase().indexOf(searchString.name)!== -1;
}
return myFilterPredicate;
}
}
我正在寻找的是一旦应用了列过滤器,默认过滤器应该更新现有的过滤条件并返回进一步过滤的数据。
最佳答案
我想你只是忘了为 searchString.name
调用 toLowerCase()
data.name.toString().trim().toLowerCase().indexOf(searchString.name.toLowerCase())!== -1;
编辑:一种方法是在您的组件类中创建一个全局过滤器字段。
globalFilter = '';
<mat-form-field>
<input matInput [ngModel]="globalFilter" (ngModelChange)="applyFilter($event)" placeholder="Filter">
</mat-form-field>
applyFilter(filter) {
this.globalFilter = filter;
this.dataSource.filter = JSON.stringify(this.filteredValues);
}
然后尝试在其他字段之前先使用全局过滤器进行过滤。
customFilterPredicate() {
const myFilterPredicate = (data: PeriodicElement, filter: string): boolean => {
var globalMatch = !this.globalFilter;
if (this.globalFilter) {
// search all text fields
globalMatch = data.name.toString().trim().toLowerCase().indexOf(this.globalFilter.toLowerCase()) !== -1;
}
if (!globalMatch) {
return;
}
let searchString = JSON.parse(filter);
return data.position.toString().trim().indexOf(searchString.position) !== -1 &&
data.name.toString().trim().toLowerCase().indexOf(searchString.name.toLowerCase()) !== -1;
}
return myFilterPredicate;
}
关于angular - MatTable 上的多个过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52007176/
我一直在尝试应用多列过滤,即列标题中的文本输入将仅过滤列的内容。到目前为止,我已经能够通过覆盖 filterPredicate 的 MatTableDataSource 但是一旦我覆盖了跨列的默认过滤
我有一个 MatTable,它实现了由 Angular Material 的 documentation 指示的选择。 一切正常,进行选择等;但我在想是否可以应用某种排序,以便我可以对 DataSou
目前我已经构建了一个具有可扩展行的 MatTable: 和行: 可扩展行附有动画: animations:
我的数据源有问题,因为我需要在表标题中显示 selectAll 复选框。 当我尝试 console.log 数据源时,它返回一个空数组,并且 dataSource.data-length 返回零。 我
我的数据源有问题,因为我需要在表标题中显示 selectAll 复选框。 当我尝试 console.log 数据源时,它返回一个空数组,并且 dataSource.data-length 返回零。 我
我有一个 Angular Material 表,它使用 detailRow 指令将细节/同级相邻行插入到表行。 StackBlitz 我想给它一个外观,好像该行正在展开或折叠,所以我向它添加了几个图标
由于某些原因,设置 height:100% 不起作用。 关于如何仅将给定单元格(红色单元格)扩展到 100% 行高的任何想法? Stackblitz 适合您 https://stackblitz.co
在我来到这里之前,我已经为这个问题苦苦思索了好一阵子。本质上,我有一个使用动画创建详细信息行的 Angular Material 表。当表排序时,它会重新排列数据。在该过程中,一些详细信息行会过渡到无
我在我的项目中使用 Angular Material ,并且我使用 Mat-Table 来渲染每个表 1000 个产品/行。当将表的分页(我们使用后端分页)更改为 1000 行时,性能变得非常慢,我什
我有 MatTable,我想使用我从用户 input 存储的 values 进行过滤 我能够检查该值是否匹配数据,但我不知道如何在不使用 filterPredicare 的情况下过滤表格,因为使用另一
我一直在尝试使用通过订阅相应服务返回的一系列产品。 在列表或类似的东西上显示对象属性时它工作得很好,但我一直在努力使用 Material 组件数据表。 我尝试通过使用 products 数组作为参数实
我是一名优秀的程序员,十分优秀!