Javascript RxJS侦听事件,但稍后附加事件侦听器
有了RxJS,我想订阅事件。问题是:我想在设置事件侦听器之前设置Observable 将其想象为两个按钮:Button1在单击时执行某些操作,但仅在button2将事件侦听器附加到Button1之后。观察者应该订阅button1的点击事件。所有这些都应该在应用程序启动时连接在一起。按钮2不应该设置观察者!一些没有RxJS的代码:Javascript RxJS侦听事件,但稍后附加事件侦听器,javascript,events,rxjs,Javascript,Events,Rxjs,有了RxJS,我想订阅事件。问题是:我想在设置事件侦听器之前设置Observable 将其想象为两个按钮:Button1在单击时执行某些操作,但仅在button2将事件侦听器附加到Button1之后。观察者应该订阅button1的点击事件。所有这些都应该在应用程序启动时连接在一起。按钮2不应该设置观察者!一些没有RxJS的代码: button2.addEventListener('click', function() { // [...] some code to prevent tha
button2.addEventListener('click', function() {
// [...] some code to prevent that button1 has more than one event listener
// attach event listener to button1
button1.addEventListener('click', clickHandler);
// now let observer subscribe itself to clickHandler somehow
// -> HOW?
});
function clickHandler() {
console.log("clicked");
}
编辑:也许,有可能观察到某种虚拟事件处理程序,它从不发出任何东西,但在单击按钮2或类似的东西后变成真正的事件处理程序(clickHandler
)
Edit2:我注意到这两个按钮并不是最好的例子。让我们改变一下,让button2的事件监听器通过一些未知的机制连接起来。例如:
// is called by unkown means, i. e. the observer doesn't know how and when its attached
function attach() {
button1.addEventListener('click', clickHandler);
}
但是当调用
attach()
时,观察者应该订阅clickHandler
。或者,观察者可能一直订阅某个函数,attach()
将该函数与实际的事件侦听器交换。不知道。据我所知,你想要创建一个可观测的物体,它会在物体上发射一个物体
每次单击按钮1
,但仅在一段时间之前单击按钮2
之后
那么这应该是可行的:
var button1=document.querySelector('#button1');
var button2=document.querySelector(“#button2”);
var onButton2Click$=Rx.Observable.fromEvent(button2,'click')。取(1);
var onButton1Click$=Rx.Observable.fromEvent(button1,'click').skipUntil(onButton2Click$);
OnButton1单击$.subscribe(函数(事件){
console.log('单击按钮1')
});代码>
按钮1
按钮2
感谢您抽出时间回答。如果事件监听器不是通过button2连接的,而是通过其他方式连接的,您会怎么做?如果没有take(1)
和skipUntil()?请参阅我问题中的Edit2。我添加了关于编辑的第二个示例,使用主题来“附加”侦听器。你不需要一个按钮,它只是用来测试这个例子。为什么没有skipUntil
?如果您想使用RxJs,那么应该使用它的方法。