Вы можете передать извлеченный JSON компонент фильтрации в качестве входных данных, а также внедрить службу туда, если входные данные не получены, вы можете вызвать службу непосредственно там.
После фильтрации данных, передать отфильтрованные данные в компонент приложения.
Filter Comp. html
<button (click)="search()">Search</button>
Filter comp.ts
export class SearchByFilterComponent implements OnInit {
@Input() userList: any[];
@Output() filteredList = new EventEmitter();
searchName:string = '';
constructor(private userService: UserManagerService) { }
ngOnInit() {
}
search() {
if (this.userList) {
this.filter();
} else {
this.userService.GetUsers().subscribe(data => {
this.userList = data;
this.filter();
})
}
}
filter() {
if (this.userList) {
const filteredData = this.userList.filter(ob => {
return ob.name.toLowerCase().includes(this.searchName.toLowerCase());
});
this.filteredList.emit(filteredData)
}
}
}
App. html
<app-search-by-filter (filteredList)="updateList($event)" [userList]="usersListToSend"></app-search-by-filter>
App.comp.ts
usersListToSend: any[];
FetchData(): void {
this.userService.GetUsers().subscribe(data => {
console.log(data);
this.usersList = data;
this.usersListToSend = data;
})
}
updateList(e) {
this.usersList = e;
}
Выше представлены предлагаемые новые изменения, остальная часть вашего кода остается прежней.
Эта фильтрация в идеале должна выполняться в API уровень, но поскольку у нас есть JSON, мы каждый раз запрашиваем его.