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