Javascript 跨时间跨度收集键盘输入
我正在使用Angular 10,并尝试使用RXJS在一定时间内收集Javascript 跨时间跨度收集键盘输入,javascript,angular,rxjs,Javascript,Angular,Rxjs,我正在使用Angular 10,并尝试使用RXJS在一定时间内收集window:keyup事件,但不幸的是,这一点都不太成功。基本上我想输入数据,如果在一定时间内没有按键,请求应该被提交 fromEvent(window, 'keyup').pipe( map((ev: KeyboardEvent) => ev.key), scan((acc, value) => acc + value), debounceTime(500) ).subscribe(key =>
window:keyup
事件,但不幸的是,这一点都不太成功。基本上我想输入数据,如果在一定时间内没有按键,请求应该被提交
fromEvent(window, 'keyup').pipe(
map((ev: KeyboardEvent) => ev.key),
scan((acc, value) => acc + value),
debounceTime(500)
).subscribe(key => {
console.log(key);
});
这就是我的基本方法,基本上是做我想做的事情,但是我无法删除订阅结果中的扫描结果
有没有更好的方法来实现我想要的行为?我发现的一种方法是在旁边使用
主题
,让它发出一个可观察的结果,该结果为每个生成的字符串设置并销毁自己:
const result$=new Subject();
fromEvent(窗口“keyup”)。管道(
排气图(键=>fromEvent(窗口“keyup”)。管道(
takeUntil(结果$),
startWith(键),
映射((事件:KeyboardEvent)=>event.key),
扫描((acc,curr)=>acc+curr),
去BounceTime(500),
点击(val=>result$.next(val)),
)),
).subscribe();
结果$.subscribe(console.log);//在这里,您可以执行请求逻辑,
//并确保将其设置为“取消订阅”
//(例如,使用takeUntil和destroy$主题)。
当按下第一个键时,它将设置外部可观察对象。然后,它创建内部可观察对象,观察按下的每一个键,直到500毫秒的去抖动时间过去,在这一点上它会使对象发出光。同一个物体的发射杀死了内部可观察物,允许外部可观察物再次启动。不要忘了在主体和外部可观察对象上使用取消订阅方法。为什么需要管道中的
扫描方法?OP将不同的键值连接成一个字符串。这是一个有趣的问题,我正在寻找解决方案^^