В файле ts вы можете объединить поток поиска и поток списка, чтобы получить поток результатов.
// a stream of search keyword
const search$ = new Subject();
const refineSearch$ = search$.pipe(
// you can filter out empty string if you want
filter(keyword => keyword !== ''),
// avoid to many work by debounceTime
debounceTime(500),
)
// here use of for demonstration
// if your list is changing over time
// its should be a list of stream
const list$ = of(aListOfItem);
const result$ = combineLatest(refineSearch$, list$)
.pipe(map(([keyword, list]) => getSearchResult(keyword, list)));
function getSearchResult(keyword, list) {
// implement your filter
// return an array
}
В шаблоне событие ввода просто примет следующее значение для потока поиска.
<input type="text" class="form-control" (input)="search$.next($event.target.value)" placeholder="Search serial...">
ul не сильно изменился, просто замените отфильтрованные элементы, чтобы получить $ stream
<ul class="list-group" style="width:80%; margin:0 auto; font-weight: bold; margin-top: 2%;">
<li *ngFor="let item of result$ | async" class="list-group-item">{{item.seriale}}
<button style="float:right;">{{item.seriale}}Download certificati</button>
</li>
</ul>