在开发项目过程中,我们会遇到这样的场景:
当用户在搜索框中输入名字时,当用户输入完毕后,自动发送搜索请求,实时响应
;而不是多按一个按钮或者回车键。
如果按照常规思路,我们会绑定input
的keyup
事件,每次击键后,执行相对应的请求函数。
但是,如果每次击键都发送一次请求,会造成请求过多,成本太昂贵了。 最好能等到用户停止输入时才发送请求。
那么,使用 RxJS 的操作符
就能轻易实现它,参见下面的代码片段(search.component.ts):
withRefresh = false;
packages$: Observable<NpmPackageInfo[]>;
private searchText$ = new Subject<string>();
search(packageName: string) {
this.searchText$.next(packageName);
}
ngOnInit() {
this.packages$ = this.searchText$.pipe(
debounceTime(500),
distinctUntilChanged(),
switchMap(packageName =>
this.searchService.search(packageName, this.withRefresh))
);
}
The searchText$
is the sequence of search-box values coming from the u