Прежде всего, ваша Модель данных не имеет синтаксического смысла.Я полагаю, вы имеете в виду что-то вроде этого:
items: any = [{
title: 'Abc',
items_containers : [{
title: 'edf',
items_containers: [{
title: 'pqr',
items_containers: [
]
}]
}]
}, {
title: 'TTT',
items_containers : [{
title: 'edf',
items_containers: [{
title: 'pqr',
items_containers: [
]
}]
}]
}];
Вы можете легко отфильтровать свои элементы, чтобы найти все элементы, содержащие строку поиска, например:
@Pipe({
name: 'filter'
})
export class FilterPipe implements PipeTransform {
transform(items: any[], searchText: string): any[] {
if(!items) return [];
if(!searchText) return items;
return this.searchItems(items, searchText.toLowerCase());
}
private searchItems(items :any[], searchText): any[] {
let results = [];
items.forEach(it => {
if (it.title.toLowerCase().includes(searchText)) {
results.push(it);
} else {
let searchResults = this.searchItems(it.items_containers, searchText);
if (searchResults.length > 0) {
results.push({
title: it.title,
items_containers: searchResults
});
}
}
});
return results;
}
}
См. Соответствующий fiddle для получения дополнительной информации.
Это то, что вы просили?
Best, Philipp