Вы должны объявить предикат фильтра после создания нового MatTableDataSource
.
filterObj: {role: string, status: string} = {role: null, status: null}; // <-- declare this at the start of your component.
this.dataSource.filterPredicate = (myObject, filter) => {
let filterObj: {role: string, status: string} = JSON.parse(filter);
if(((filterObj.role && filterObj.role != '') ? myObject.role == filterObj.role : true) && ((filterObj.status && filterObj.status != '') ? myObject.status == filterObj.status : true)) {
return true;
} else {
return false;
}
}
И, возможно, вы вызываете функцию applyFilter
для keyup
в вас matInput
. У меня всегда есть функция, в которой я могу установить фильтр, определенный по типу, который я даю своей функции. Не забудьте сохранить объект фильтра в этом случае в вашем компоненте.
applyFilter(value: string,type: string) {
switch(type) {
case 'role':
this.filterObj.role = value;
break;
case 'status':
this.filterObj.status = value;
break;
default:
break;
}
this.dataSource.filter = JSON.stringify(this.filterObj);
}
Это должно работать для вас.