Я получил источник данных Angular Material, существующий из массива с объектами этой модели:
export class Permission[] {
name: string;
content_type: {
id: number;
name: string;
};
codename: string;
}
Таким образом, источник данных на самом деле похож на Permission [] [] , и я построил следующее filterPredicate для него:
this.permissionsDataSource.filterPredicate = (data, filter: string) => {
let dataStr = '';
data.forEach(x => {
Object.keys(x).forEach(y => {
if (x[y] !== null && typeof x[y] === 'object') {
Object.keys(x[y]).forEach(z => {
dataStr += y[z];
});
} else {
dataStr += x[y];
}
});
});
const transformedFilter = filter.trim().toLowerCase();
return dataStr.indexOf(transformedFilter) !== -1;
};
Это прекрасно работает, но для меня это не лучшее решение для практики.У вас есть предложения по улучшению?Не было бы полезно создать общее решение для вложенных фильтров?