如何檢測 SAP 電商雲 Spartacus UI 當前正處於導航狀態
阿新 • • 發佈:2021-11-01
使用 routing.selector.ts 裡的 isNavigating:
設計原理:Spartacus route reducer 裡針對 ROUTER_NAVIGATION 和 ROUTER_NAVIGATED 進行狀態遷移:
當接收到 ROUTER_NAVIGATION(跳轉正在進行) 事件時,將狀態的 nextState 欄位設定成 action payload:
當接收到 ROUTER_NAVIGATED(跳轉已經完成) 事件時,將狀態的 nextState 欄位設定成 undefined:
回到本文開頭的 API,如果 nextState 不為空,說明正在 navigating.
selector 就是純函式,能夠返回 state 的某一個切片的資料。
只有通過 createSelector 建立的 selector,才具有記憶功能(memoized),即對於相同的輸入,一定會返回相同的輸出。
為什麼 pageMetaService 會觸發到 Router State 的 selector?
看看 this.meta$ 的資料來源:
meta$ 來自 this.cms.getCurrentPage:
從全域性 store 裡呼叫 RoutingSelector 的 getPageContext 方法:
最後 selector 被呼叫:
更多Jerry的原創文章,盡在:"汪子熙":