ngFor фильтровать по тексту с помощью trackby

#angular #typescript #filter #ngfor

#angular #машинописный текст #Фильтр #ngfor

Вопрос:

Я работаю над приложением angular 4, и у меня есть большой массив объектов (например, 200 строк) Итак, я ввел поисковый ввод, и ngFor связан с каналом, который фильтрует по имени в соответствии с тем, что вы пишете во входных данных. Что-то вроде этого

 <input type="text" [(ngModel)]="searchtext" placeholder="Search">
<div *ngFor="let m of (devices | filterEquipments : searchtext)">{{ m.name }}</div>
 

Проблема в том, когда я начинаю печатать. По-видимому, фильтрация происходит очень медленно при отображении содержимого в html.
Итак, исследуя решение, я увидел, что с помощью «trackBy» в «ngFor» можно оптимизировать результат.
Проблема в том, что я не знаю, как это правильно реализовать, и может ли это помочь мне быстрее фильтровать элементы.

Как я могу реализовать быстрый фильтр?

Ответ №1:

Может быть, попробуйте добавить некоторую задержку

 <input type="text" [value]="item.task_name"(keyup)="term$.next($event.target.value)">

import ......

import {Subject} from 'rxjs/Subject';
import 'rxjs/add/operator/debounceTime';
import 'rxjs/add/operator/distinctUntilChanged';
import 'rxjs/add/operator/switchMap';
 

@Component{(

)}
экспортировать класс YourComponent {

   term$ = new Subject<string>();

  constructor() {
   this.term$
     .debounceTime(1000)
     .distinctUntilChanged()
     .switchMap(term => /*do something*/);
  }
}