【发布时间】:2019-04-13 23:59:47
【问题描述】:
我有一个输入并且在 debounce(完成输入后半秒)我正在设置一个变量。我希望这个变量改变一些 html。它有效,但只有在我完成输入后,然后输入并重新开始。所以在第二次绕过它就可以了。我希望它在第一次发生。
这是我的html:
<loader *ngIf="searchLoader"></loader>
<input
#searchInput
placeholder="Search pages"
[(ngModel)]="searchQuery"
(keyup)="debounceSearch.next($event.target.value)"
>
还有我的 ts:
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函数中的任何内容。
我尝试使用更改检测器 ref 并检测订阅功能中的更改,但它对我不起作用。
【问题讨论】:
-
这似乎对我有用(见this stackblitz)。
标签: angular input debounce angular-changedetection