我在项目中使用了名为froala的第三方文本编辑器,对于keyup事件,我必须传递一个回调函数,以便可以从编辑器中获取值。我试图以某种方式将回调函数包装起来,以便可以使用,debounceTime
但无法正常工作,下面是一些代码:
在我的组件文件中:
export class EditorComponent
editorOptions = {
events: {
'froalaEditor.keyup': (e, editor) => {
do stuff here
},
}
};
}
我尝试将其用于keyup事件,但由于它为每个事件设置了一个新的可观察对象,因此无法正常工作:
'froalaEditor.keyup': (e, editor) => {
const text = editor.html.get();
Observable.create(o => {
this.service.updateData(data);
}).pipe(takeUntil(this.ngUnsubscribe))
.pipe(debounceTime(1000))
.subscribe();
}
什么是使这项工作正确的方法?
您可以创建一个独立的Subject
并将值推入其中,例如:
export class EditorComponent
private onKeyup$ = new Subject();
editorOptions = {
events: {
'froalaEditor.keyup': (e, editor) => {
onKeyup$.next(e);
},
}
};
}
重要提示:在这种情况下,您必须自己关心订阅的完成。在特定框架的组件中搜索适当的,可观察到的完成。
要么
如果您有对编辑器DOM节点的引用,则可以fromEvent
在froala事件上使用froalaEditor.keyup
(请参阅froala docs)。
例如
const onKeyup$ = fromEvent(froalaDOMNode, 'froalaEditor.keyup');
在这种情况下,一旦DOM节点被销毁,observable将完成,因此您不必担心手动取消订阅。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句