angular6学习笔记18:请求防抖

根据用户键盘对的输入,向远端服务器发送请求并返回数据,即:常见的搜索功能

<input type="text" #searchSource placeholder="请输入搜索的内容"(keyup)='search(searchSource.value)'>

在搜索时:input控件的(keyup) 事件绑定把每次击键都发送给了组件的 search() 方法。

如果每次击键都发送一次请求就太昂贵了。 最好是能等到用户停止输入时才发送请求。此时就可以用到请求防抖(使用 RxJS 的操作符实现)。

1. 引入相关的包

import {Subject} from 'rxjs/Subject';

2.声明变量

private searchTerms = new Subject<string>();

3.serach方法

search(serachParam: string) {
  this.searchTerms.next(serachParam);
}

4.请求防抖

ngOnInit(): void {
    this.searchTerms
      .pipe(
        // 请求防抖 300毫秒
        debounceTime(300),
        distinctUntilChanged())
      .subscribe(term => {
        // 此处进行httpClient的请求
        // term是用户输入的值
      });
  }

searchTerms 是一个序列,包含用户输入到搜索框中的所有值。 它定义成了 RxJS 的 Subject 对象,这表示它是一个多播 Observable,同时还可以自行调用 next(value) 来产生值,除了把每个 searchText 的值都直接转发给 httpClient

 之外

ngOnInit() 中的代码还通过下列两个操作符对这些搜索值进行管道处理:

  1. debounceTime(300) - 等待,直到用户停止输入(这个例子中是停止 300ms)。

  2. distinctUntilChanged() - 等待,直到搜索内容发生了变化。

这样,只有当用户停止了输入且搜索值和以前不一样的时候,搜索值才会传给服务,发送请求。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值