у app.component есть данные json, отображаемые в виде с использованием * ngfor. Пользователь может выполнять поиск при вводе в поле поиска (в основном по событию keyup) .
Для удобства в будущем я сделал это search.component как общий компонент .
Я написал код и хочу знать, правильный ли это подход или даже лучший. Пожалуйста, помогите.
Примечание: В настоящее время в коде есть 7 записей, но фактические записи будут составлять минимум 1000.
Вот мой пример POC для приложения.
search.component.html - Для каждого введенного символа вызывается метод getSearchString ()
<input type="text" placeholder="type here to search" (keyup)="getSearchString(text)" #text>
search.component.ts - Использование субъекта _searchText , определенного в общем сервисе, для выдачи значения.
getSearchString(text) {
this.appService._searchText.next(text.value);
}
app.service.ts - Определение используемого объекта.
_searchText = new Subject<string>();
getSearchText$ = this._searchText.asObservable();
app.component.ts - Подписка на наблюдаемый getSearchText $ для поиска в json.
ngOnInit() {
this.data = [
{
name: 'pranjal',
id: 's1'
}, {
name: 'alini',
id: 's2'
}, {
name: 'nishank',
id: 's3'
}, {
name: 'pranvi',
id: 's3'
}, {
name: 'mayuri',
id: 's4'
}, {
name: 'malya',
id: 's5'
}, {
name: 'pravi',
id: 's5'
}
];
this.filteredData = JSON.parse(JSON.stringify(this.data));
this.appService.getSearchText$.subscribe((searchText) => {
this.filteredData = this.searchData(this.data, searchText);
});
}
searchData(data, searchText) {
let newData = [];
if (!searchText) {
newData = this.data;
} else {
newData = data.filter((obj) => {
return obj.name.includes(searchText);
});
}
return newData;
}