我得到了一个具有此模型对象的数组的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;
};
它的运行效果很好,但对我而言,这似乎并不是最佳实践解决方案。您对我有什么改善建议吗?为嵌套过滤器构建通用解决方案是否有帮助?