1. 程式人生 > 其它 >SAP Spartacus PageLayoutComponent 如何知道自己應該顯示哪些具體內容

SAP Spartacus PageLayoutComponent 如何知道自己應該顯示哪些具體內容

我們以前介紹過,經過 SAP Spartacus 路由配置後的 routes 陣列,其 route 資料結構的 Component 屬性,清一色指向 generic 的 PageLayoutComponent,那麼後者怎麼知道自己應該載入哪些 Angular Component 的資料呢?

我們首先看看是哪些 template 呼叫了 PageLayoutComponent 的 selector:

只有三處:

執行時卻有四處,這不奇怪,因為 product 明細頁面是通過路由載入的,故出現在 router-outlet 下面。

在其建構函式里加列印語句是無濟於事的,因為這個 Component 的所有欄位都是 Observable 型別,得 subscribe 了才能看到。

所以我在其 @input 欄位上設定了一個斷點:

渲染觸發點是第2行的 cxOutlet,觸發第10行的 cx-page-layout Component 的建立:

Component 例項(即 PageLayoutComponent)建立完畢後,給其 input 屬性賦值:

上圖的賦值,會觸發下圖第14行程式碼執行。

section$ 是一個 subject,其 next 邏輯是遍歷其 listener,逐一通知:

在模板檔案 async pipe 執行時,觸發 Observable 的執行:

根據 page, section 和 breakpoint,拿到該 section 裡的 slots:

layoutslot 的 key 是 page template:

這個 page template 裡並沒有一個 section 名叫 header:

所以我們就 fallback 到全域性配置裡去取 header 的 slot 配置:

getResponsiveSlotConfig:

先看 layoutConfig 裡有沒有專門為 xl 而設定的配置,發現沒有,只有 lg 的:

就找和 xl 最接近的,答案是 lg:

現在就知道了:LandingPage2Template 模板的 header 區域,應該顯示下列這些 slots:

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