машинопись debouncetime (2000) по-прежнему немедленно запускает поиск - PullRequest
0 голосов
/ 15 июня 2019

У меня есть следующие методы в компоненте, который реализует OnInit, AfterViewInit. TrackFuzzySearchChanges находится в AfterViewInit (). Независимо от того, сколько установлено время отклика, метод выполняется немедленно и выполняет loadData (), которая выполняет WEB API getScreeningSummaries3 (). Пожалуйста помоги. Спасибо.

ngAfterViewInit() {

  this.dataSource.totalRecords$.subscribe(r => {
    this.paginator.length = r;
    this.totalRecords = this.paginator.length;
  });

  this.dataSource.pageNumber$.subscribe(n => {
    this.pageNumber = n;
  });

  this.dataSource.pageSize$.subscribe(n => {
    this.pageSize = n;
  });

  this.trackFuzzySearchChanges();
  this.trackFilterChanges();
  this.trackSortChanges();
  this.trackPaginatorChanges();
}

trackFuzzySearchChanges() {
  merge(this.fuzzySearch.valueChanges)
    .pipe(
      tap(() => {
        debounceTime(2000), // fuzzy search changed when keyup for 2 sec in the mat-form-field
          distinctUntilChanged(),
          this.paginator.pageIndex = 0;
        this.loadData();
      })
    ).subscribe();
}

enter image description here

1 Ответ

0 голосов
/ 16 июня 2019

вы звоните debounceTime(2000) и distinctUntilChanged() в пределах tap оператора обратного вызова. они должны быть переданы по трубопроводу, чтобы иметь фактический эффект. я также не вижу смысла в использовании merge opeartor, поскольку он используется для превращения нескольких наблюдаемых в одну onbservable попробуйте таким образом;

trackFuzzySearchChanges() {
  this.fuzzySearch.valueChanges
    .pipe(
      debounceTime(2000), // fuzzy search changed when keyup for 2 sec in the mat-form-field
      distinctUntilChanged(),
      tap(() => {
        this.paginator.pageIndex = 0;
        this.loadData();
      })
    ).subscribe();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...