這個彈出視窗的技術實現,透過SAP Spartacus 自定義的popover Component實現而成:
注意,當我剛接觸Angular時,誤以為下圖示號為1的a標籤,和標號為2的自定義標籤cx-org-toggle-status, 會按照其在unit-details.component.html裡出現的先後順序,出現在最終的頁面裡。
實際上,我這種理解是錯誤的。
SAP Spartacus B2B 頁面如下圖右邊高亮區域所示,技術上實現在cx-org-card 選擇器對應的CardComponent裡:
Card的layout即佈局設定,實現在card.component.html裡:
其中class為actions的div標籤,作為一個place holder,容納所有消費CardComponent selector, 即cx-org-card時傳入的包含屬性actions的DOM元素。
這種動態注入元素的機制,透過下列語句完成,稱為content projection:
ng-content select="[actions]"
也就是說:下圖示號為1的a標籤,和標號為2的cx-org-toggle-status標籤頁,因為都帶有actions的屬性:
因此執行時,會出現在下圖示號為1,class為actions的div元素裡。
因此,我只需要在CardComponent的template實現,即card.component.html裡,宣告cxPopover, 這樣所有消費了CardComponent selector cx-org-card 的應用Component,都能夠自動看到 (i) icon, 而不用在Spartacus B2B 的 6個 Details Component裡,重複宣告 cxPopOver了。
更多Jerry的原創文章,盡在:"汪子熙":