Шаблон обновления Angular 5 после события

Это мой третий пост на angular. Я хочу отобразить список кандидатов типа: Candidate[]. В настоящее время я показываю его в представлении, используя *ngFor следующим образом:

    <ul>
        <li *ngFor="let candidate of candidates">
            {{ candidate.name }}
        </li>
    </ul>

Однако мне нужно отфильтровать кандидатов, чтобы они соответствовали поиску пользователя с помощью функции:

  filterResults(queryString): void {
    this.candidatesService.filterCandidates(queryString).subscribe(candidates => this.filteredCandidates = candidates);
    this.filteredCandidates = this.filteredCandidates.filter(candidate => candidate.name == queryString);
  }

Проблема в том, что функция срабатывает при нажатии на поле ввода. Таким образом, значение массива отфильтрованных кандидатов меняется в зависимости от ввода.

Кто-нибудь знает, как обновить представление шаблона, чтобы отображались только новые результаты в обновленном массиве?


person Gabriel    schedule 28.02.2018    source источник
comment
Заменить candidates на filteredCandidates?   -  person JB Nizet    schedule 28.02.2018
comment
@spectacularbob нет, вам действительно не следует: angular.io/guide/ трубы#appendix-no-filterpipe-or-orderbypipe   -  person JB Nizet    schedule 28.02.2018
comment
Спасибо за совет. На самом деле я перешел с кандидатов на фильтрованные кандидаты, и это то же самое. Я думаю, проблема в том, что * ngFor не обновляется, если переменная изменяется. Я также пробовал с асинхронным каналом, но выдает ошибку.   -  person Gabriel    schedule 28.02.2018
comment
Оно делает. Ошибка в вашем коде, а не в angular. stackblitz.com/edit/angular-x54dad?file=app% 2Fapp.component.ts   -  person JB Nizet    schedule 28.02.2018
comment
почему бы тебе не использовать массив temp[] - @Gabriel   -  person Sangeeth John    schedule 02.03.2018
comment
Я использовал что-то подобное, спасибо :)   -  person Gabriel    schedule 02.03.2018


Ответы (1)


создайте temp в *ngFor и сохраните своих кандидатов в temp[], которые используются всякий раз, когда при отсутствии условия поиска и в процессе обработки keyup получают this.filteredCandidates и вставляют его в temp[] и отображают.

person Sangeeth John    schedule 02.03.2018
comment
Я действительно использовал что-то подобное. Проблема была решена. У меня есть массив со всеми кандидатами и фильтровать их после. - person Gabriel; 02.03.2018