天天看點

如何檢測 SAP 電商雲 Spartacus UI 目前正處于導航狀态

使用 routing.selector.ts 裡的 isnavigating:

如何檢測 SAP 電商雲 Spartacus UI 目前正處于導航狀态

設計原理:spartacus route reducer 裡針對 router_navigation 和 router_navigated 進行狀态遷移:

如何檢測 SAP 電商雲 Spartacus UI 目前正處于導航狀态

當接收到 router_navigation(跳轉正在進行) 事件時,将狀态的 nextstate 字段設定成 action payload:

如何檢測 SAP 電商雲 Spartacus UI 目前正處于導航狀态

當接收到 router_navigated(跳轉已經完成) 事件時,将狀态的 nextstate 字段設定成 undefined:

如何檢測 SAP 電商雲 Spartacus UI 目前正處于導航狀态

回到本文開頭的 api,如果 nextstate 不為空,說明正在 navigating.

selector 就是純函數,能夠傳回 state 的某一個切片的資料。

隻有通過 createselector 建立的 selector,才具有記憶功能(memoized),即對于相同的輸入,一定會傳回相同的輸出。

如何檢測 SAP 電商雲 Spartacus UI 目前正處于導航狀态

為什麼 pagemetaservice 會觸發到 router state 的 selector?

如何檢測 SAP 電商雲 Spartacus UI 目前正處于導航狀态

看看 this.meta$ 的資料源:

如何檢測 SAP 電商雲 Spartacus UI 目前正處于導航狀态

meta$ 來自 this.cms.getcurrentpage:

如何檢測 SAP 電商雲 Spartacus UI 目前正處于導航狀态
如何檢測 SAP 電商雲 Spartacus UI 目前正處于導航狀态

從全局 store 裡調用 routingselector 的 getpagecontext 方法:

如何檢測 SAP 電商雲 Spartacus UI 目前正處于導航狀态

最後 selector 被調用:

如何檢測 SAP 電商雲 Spartacus UI 目前正處于導航狀态

更多jerry的原創文章,盡在:"汪子熙":

如何檢測 SAP 電商雲 Spartacus UI 目前正處于導航狀态