Реализация отложенного выполнения с помощью rxjs - PullRequest
0 голосов
/ 30 сентября 2019

Мне нужно реализовать своего рода отложенное выполнение некоторых действий. Например, когда вы вводите строку поиска и не хотите, чтобы поиск отправлял запрос на сервер, пока пользователь не прекратит печать. Вроде того, что мы все видим в поисковых системах, таких как Google и т. Д. Как лучше всего реализовать это с помощью rxjs?

Ответы [ 3 ]

3 голосов
/ 30 сентября 2019

Создайте FormControl и прослушайте изменения, используя этот фрагмент:

<input [formControl]="control">

... 

public control = new FormControl();

this.control.valueChanges
  .pipe(
    debounceTime(300),
    distinctUntilChanged()
  )
  .subscribe((value: string) => {

    // Do stuff with the value
  }
);

Не забудьте отписаться;)

2 голосов
/ 30 сентября 2019

Для этого можно использовать оператор debounceTime :

const textInput$ = fromEvent(this.yourInput.nativeElement, 'keyup');

textInput$.pipe(
  debounceTime(500), // discard emitted values that take less than 500ms
  switchMap(text => this.getSearch(text)) // getSearch is your request to the server
)
.subscribe();
0 голосов
/ 30 сентября 2019

То, что вы описываете, звучит как классическая функциональность заголовка.

Я бы рекомендовал прочитать об операторе debounceTime(). Typeahead

Это прекратит прием дополнительных запросов, пока не пройдет определенное время, и только затем передаст ваш запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...