使用RxJS,我想訂閱事件。問題是:我想在設置事件監聽器之前設置Observable。RxJS監聽事件但稍後附加事件監聽器
想想這就像兩個按鈕:Button1做了點擊事情,但只有在button2將一個事件偵聽器附加到button1之後。觀察者應該訂閱button1的點擊事件。所有這些應該在應用程序啓動時連接在一起。 Button2不應該設置觀察者!一些代碼,而無需RxJS:
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");
}
編輯:也許,是可以觀察到某種從未發出任何假人事件處理程序的,但變成真正的事件處理程序(clickHandler
)按鈕2被點擊後或類似的東西?!
編輯2:我注意到2個按鈕不是最好的例子。讓我們改變它,讓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
。或者,Observer可能會一直訂閱某個函數,attach()
會將該函數與實際的事件偵聽器進行交換。不知道。
感謝您抽出寶貴時間來回答。如果事件偵聽器沒有被button2附加,但是通過其他方式,你會怎麼做?如果沒有'take(1)'和'skipUntil()',這將如何工作?請參閱我的問題中的Edit2。 – ntaso
我加了一個關於你的編輯的例子,用'Subject'來「附加」了監聽器。你不需要一個按鈕,這只是爲了測試這個例子。你爲什麼不做'skipUntil'呢?如果你想使用RxJs,那麼你應該使用它的方法。 – cyrix