Angular项目中使用rxjs实现输入自动搜索的功能,类联想组件

        在项目中仿照网易云音乐首页搜索框实现了一个输入框输入内容自动加载表格数据的功能,具体实现看代码。

        1、html模板相关dom

<input type="text" placeholder="请输入内容查询" [(ngmodel)]="searchModel" #searchInput>

      2、compoent组件对应内容,在组件对应的afterViewInit对应的生命周期方法中创建input框对应的事件Observable对象,并完成订阅。核心是对debounceTime,distinctUtilChange,pluck操作符的学习和理解。

@ViewChild('searchInput') searchInput: ElementRef;

ngAfterviewInit() {
    fromEvent(this.searchInput.nativeElement, 'input').
    debounceTime(500). // 延时500毫秒发送源Observable发出的值,如果500毫秒内源Observable有新值发出,就会丢弃掉前一个延迟发送
    distinctUtilChanged(). // 发出源Observable前一个值不相同的值,这样就避免了重发请求
    pluck('target', 'value'). // 将源Observable中发出的值映射为的target对应的value属性,也就是在订阅的时候只需要value值
    subscribe((value: string) => {
        this.getTableData(value);
    });
}
    // 获取表格数据
getTableData(value) {
    this.dataService.getTableData({}).subscribe(res =>{
    }, err => {
    });
}

        3、在rxjs6之后,关于Observable的操作符有一个比较大的改变,需要在管道中去完成,具体如下:

fromEvent(this.searchInput.nativeElement, 'input').
    pipe(debounceTime(500),
        distinctUtilChanged(),
        pluck('target', 'value')). 
    subscribe((value: string) => {
        this.getTableData(value);
    });

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值