我有鼠标移动事件:
fromEvent(document, 'mousemove').pipe(
filter(e => e.target !== this.formElement.nativeElement),
filter(_ => this.form.valid),
take(1),
mergeMap((): any => this.confirm()),
).subscribe();
confirm() {
this.snack.open('sure', 'yes').onAction()
.subscribe(_ => {
this.createNoteService.create();
})
}
确认零食按钮后,我希望鼠标事件再次开始工作。
有可能吗?谢谢
这只适用于第一次,因为您有take(1)
,它在收到一个值后结束可观察。
此外,您的confirm()
方法应该返回observable;不要在函数内部订阅;mergeMap
将自动为您订阅/取消订阅。
但是,您可以使用exhaustMap
而不是mergeMap
。这样一次只允许一个内部订阅。它将忽略任何传入的排放,直到其当前来源完成:
fromEvent(document, 'mousemove').pipe(
filter(e => e.target !== formElement.nativeElement),
filter(_ => form.valid),
exhaustMap(() => confirm()),
).subscribe();
function confirm() {
return snack.open('sure', 'yes').onAction().pipe(
tap(() => this.createNoteService.create())
);
}