У меня есть ввод и по дебаусу (через полсекунды после окончания набора текста) ставлю переменную. Я хочу, чтобы эта переменная изменила некоторый html. Это работает, но только после того, как я закончу печатать, затем наберу и начну снова. Так что со второго раза все работает. Я бы хотел, чтобы это произошло в первый раз.
Вот мой html:
<loader *ngIf="searchLoader"></loader>
<input
#searchInput
placeholder="Search pages"
[(ngModel)]="searchQuery"
(keyup)="debounceSearch.next($event.target.value)"
>
и мой ТС:
debounceSearch: Subject<any> = new Subject<any>();
ngOnInit() {
this.debounceSearch
.pipe(debounceTime(500))
.pipe(takeUntil(this.destroy$))
.subscribe(() => {
this.searchLoader = true;
this.searchDocs();
});
}
Таким образом, в приведенном выше примере <loader></loader>
появляется только после второго устранения дребезга. Это странно, потому что я сразу же установил переменную в значение true.
- debounceTime исходит из оператора rxjs
import { debounceTime, takeUntil } from "rxjs/operators";
, по существу, через заданное время (500 мс) он запускает то, что когда-либо было в функции.subscribe
.
Я пытался использовать ссылку детектора изменений и обнаруживать изменения в функции подписки, но у меня это не сработало.