在 Angular 中重置 this.dataSource.filterPredicate
Reset this.dataSource.filterPredicate in Angular
我在 mat-table
上使用过滤器和 select,为了使用 select 进行过滤,我在相关字段上使用过滤谓词。
public applyFilter(filterValue: string) {
this.dataSource.filterPredicate = (data: SP, filter: string) => {
return data.tag === filter;
};
this.dataSource.filter = filterValue;
}
但我也有一个像这样的标准过滤器,用于使用输入字段进行过滤:-
public filter(filterValue: string): void {
filterValue = filterValue.trim();
filterValue = filterValue.toLowerCase();
this.dataSource.filter = filterValue;
}
如何重置原始 filterPredicate
以便第二个过滤器可以运行?
这只是一个非常丑陋的补丁,但我遇到了同样的问题并通过查找 material-table.umd.js
中原始过滤器的工作方式并复制它来解决它。我知道一定有更好的方法,我也希望将 filterPredicate
设置回 null
应该有效,但没有。可能不是最佳答案,但这对我有用:
public filter(filterValue: string) : void {
this.dataSource.filterPredicate =
function (data, filter) {
var dataStr = Object.keys(data).reduce(function (currentTerm, key) {
return currentTerm + data[key] + '◬';
}, '').toLowerCase();
var transformedFilter = filter.trim().toLowerCase();
return dataStr.indexOf(transformedFilter) != -1;
};
filterValue = filterValue.trim();
filterValue = filterValue.toLowerCase();
this.dataSource.filter = filterValue;
}
声明一个组件级变量defaultFilterPredicate
并将其设置为ngOnInit
defaultFilterPredicate?: (data: any, filter: string) => boolean;
ngOnInit() {
this.defaultFilterPredicate = this.dataSource.filterPredicate;
}
然后当你需要重置的时候,设置回组件第一次加载时的状态,即默认即可。
this.dataSource.filterPredicate = this.defaultFilterPredicate;
我在 mat-table
上使用过滤器和 select,为了使用 select 进行过滤,我在相关字段上使用过滤谓词。
public applyFilter(filterValue: string) {
this.dataSource.filterPredicate = (data: SP, filter: string) => {
return data.tag === filter;
};
this.dataSource.filter = filterValue;
}
但我也有一个像这样的标准过滤器,用于使用输入字段进行过滤:-
public filter(filterValue: string): void {
filterValue = filterValue.trim();
filterValue = filterValue.toLowerCase();
this.dataSource.filter = filterValue;
}
如何重置原始 filterPredicate
以便第二个过滤器可以运行?
这只是一个非常丑陋的补丁,但我遇到了同样的问题并通过查找 material-table.umd.js
中原始过滤器的工作方式并复制它来解决它。我知道一定有更好的方法,我也希望将 filterPredicate
设置回 null
应该有效,但没有。可能不是最佳答案,但这对我有用:
public filter(filterValue: string) : void {
this.dataSource.filterPredicate =
function (data, filter) {
var dataStr = Object.keys(data).reduce(function (currentTerm, key) {
return currentTerm + data[key] + '◬';
}, '').toLowerCase();
var transformedFilter = filter.trim().toLowerCase();
return dataStr.indexOf(transformedFilter) != -1;
};
filterValue = filterValue.trim();
filterValue = filterValue.toLowerCase();
this.dataSource.filter = filterValue;
}
声明一个组件级变量defaultFilterPredicate
并将其设置为ngOnInit
defaultFilterPredicate?: (data: any, filter: string) => boolean;
ngOnInit() {
this.defaultFilterPredicate = this.dataSource.filterPredicate;
}
然后当你需要重置的时候,设置回组件第一次加载时的状态,即默认即可。
this.dataSource.filterPredicate = this.defaultFilterPredicate;