1. 程式人生 > 其它 >如何檢測 SAP 電商雲 Spartacus UI 當前正處於導航狀態

如何檢測 SAP 電商雲 Spartacus UI 當前正處於導航狀態

使用 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的原創文章,盡在:"汪子熙":