rxjs distinctUntilChanged比较input框的两次值是否相同
业务场景:一个input框,监听当前内容发生变化,判断非空、前后两次值不一样,防抖后,发送请求并展示数据
使用of
创建一个流,使用该操作符
of<Person>(
{ age: 4, name: 'Foo' },
{ age: 7, name: 'Bar' },
{ age: 5, name: 'Foo' },
{ age: 6, name: 'Foo' },
{ age: 8, name: 'Foo' },
{ age: 9, name: 'Foo' },
{ age: 2, name: 'Foo1' },
)
.pipe(
distinctUntilChanged((p, q) => {
console.log(p, q, p.name === q.name);
return p.name === q.name;
})
)
.subscribe((x) => console.log(x));
//{"age":4,"name":"Foo"}
//{"age":7,"name":"Bar"}
//{"age":5,"name":"Foo"}
//{"age":2,"name":"Foo1"}
监听input的变化
this.input$ = fromEvent(this.inputEl.nativeElement, 'input');
this.input$
.pipe(
filter((el) => {
return Boolean(el.target.value);
}),
// map(input => input),
distinctUntilChanged((pre: InputEvent, next: InputEvent) => {
return (
(pre.target as HTMLInputElement).value ===
(next.target as HTMLInputElement).value
);
}),
debounceTime(500)
)
.subscribe((val) => {
console.log(val)
});
期望使用rxjs操作符,能比较两次值的,并且保留input事件触发(不使用change事件),如果一致则不做操作(不要手动缓存比)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)