通过 Feature Level 动态控制 SAP Spartacus 的页面显示
ng-container 標簽只在 design time 可見,運行時會完全從渲染出的 HTML 源代碼里被移除。通過 ng-container 加上 SAP Spartacus 自定義實現的 cxFeatureLevel Directive, 可以實現根據配置的 Feature level,動態控制某個頁面片段是否顯示的效果。
如下圖所示,紅色高亮區域內的 HTML 頁面布局,僅當 SAP Spartacus 配置的 feature Level >= 3.2 才能夠在 UI 上顯示出來。
這個動態顯示 UI 的邏輯實現在 cxFeatureLevel Directive 里。
該 Directive 實現里,使用 @Input set 定義了一個 input,當消費者使用 Directive,傳入了一個 feature level 后,觸發該 cxFeatureLevel 方法,調用構造函數里注入的 viewContainer 提供的 createEmbeddedView 方法,動態創建視圖。待創建的視圖元數據存儲在另一個注入參數 tenplateRef 里。
this.config 來自 SAP Spartacus 項目里存儲的配置信息。
embeddedTView 和 embeddedLView 都是 Angular 框架根據注入 Directive 構造函數的待渲染視圖的元數據創建的,作為輸入參數調用 renderView 進行頁面渲染:
從 templateFn 的指向的函數名,如下圖 ConfirmationMessageComponent_ng_container_1_Template, 大致就能知道,該 Directive 準備渲染 HTML 模板里 ng-container 包裹的 HTML 標簽。
即如下圖所示:
做個測試:把 app.module.ts 里的 features level 改成 3.1:
發現確實按照我們期望的工作了,被 cxFeatureLevel 控制的 ng-container 里的 p 標簽(messageTitle),已經消失了:
更多Jerry的原創文章,盡在:“汪子熙”:
總結
以上是生活随笔為你收集整理的通过 Feature Level 动态控制 SAP Spartacus 的页面显示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 别误用IsDigit与IsNumber函
- 下一篇: 在autocad中怎么去除教育版打印戳记