Subject 在 SAP Spartacus Popover Component 中的應用
阿新 • • 發佈:2021-07-17
Subject 是 Rxjs 裡的一個工具物件。
Subject 是一種特殊型別的 Observable,它允許將值多播到許多觀察者。 Subject 就像 EventEmitters。
每個 Subject 都是 Observable 和 Observer。 您可以訂閱一個主題,您可以呼叫 next 提要值以及錯誤和完成。
這個屬性定義在 Popover Component 上:
其賦值操作發生在 Popover Directive 的程式碼裡:
當 Popover Component 的 Close 按鈕被滑鼠或者鍵盤觸發時,觸發註冊好的 close 事件處理函式:
在 close 事件處理函式裡,通過 Subject 向其監聽者廣播 CLOSE_BUTTON_CLICK 或者 CLOSE_BUTTON_KEYDOWN 事件。
在 Popover Directive 裡定義了所有能夠觸發 Popover Component 關掉的事件,如上圖所示。
Popover Directive 是這些事件的監聽者。
這裡有兩個問題:
- handlePopverEvents 什麼時候被誰呼叫?
- 為什麼是 Directive 的 close 函式負責關閉 Popover Component?
對於第一個問題,這裡能看出端倪了:Popover Directive 的 eventSubject 負責監聽事件,然後這個 eventSubject 例項賦給 Component 例項,後者負責傳送事件:
close 操作:
如果註釋掉上圖第155行,則無法關閉 Popover Component 了:
更多Jerry的原創文章,盡在:"汪子熙":