почему бы не использовать мат-дерево? основан на это SO о древовидном представлении
Нам нужны две рекурсивные функции:
setChildOk(text: string, node: any) {
node.forEach(x => {
x.ok = x.name.indexOf(text) >= 0;
if (x.parent) this.setParentOk(text, x.parent,x.ok);
if (x.children) this.setChildOk(text, x.children);
});
}
setParentOk(text, node,ok) {
node.ok = node.ok || ok || node.name.indexOf(text)>=0;
if (node.parent) this.setParentOk(text, node.parent,node.ok);
}
Мы можем добавить вход «поиск» и сделать функцию
<input matInput [ngModel]="search"
(ngModelChange)="search=$event;setChildOk($event,dataSource.data)">
Что ж, теперь мы покажем, что узлы - это node.ok или if! Search
<mat-tree-node *matTreeNodeDef="let node" matTreeNodeToggle
[style.display]="!search || node.ok?'block':'none'">
И
<mat-nested-tree-node *matTreeNodeDef="let node; when: hasChild"
[style.display]="!search || node.ok?'block':'none'">
См. В этот стекаблит