我们以前介绍过,经过 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的原创文章,尽在:“汪子熙”:

SAP Spartacus PageLayoutComponent 如何知道自己应该显示哪些具体内容相关推荐

  1. 如何查看 SAP Spartacus PageLayoutComponent 里的 template$ 的值

    SAP Spartacus PageLayoutService.ts 里的 templateName$ get 操作:返回一个 Observable 对象,包裹的类型为 string. pipe 的第 ...

  2. SAP Spartacus 404 Not found页面的显示机制 - canActivateNotFoundPage

    这个方法位于类CmsPageGuardService内. 当我们请求一个实际并不存在的page时, 因为1这个path对应的route configuration里的protected字段为undef ...

  3. SAP Spartacus的登录页面的用户名显示逻辑

    SAP Spartacus登录页面如下图所示: 通过login form用户输入的用户名和密码去换取token,拿到token后,调用另一个API,将token作为Authorization字段输入: ...

  4. SAP Spartacus B2B 页面 Disable 按钮的显示原理

    SAP Spartacus B2B 页面 disable 按钮如下图所示. 这个高亮的 disable 按钮,和左边相邻的 Edit 按钮,实现位于不同的 Component. disable 按钮有 ...

  5. SAP Spartacus PagelayoutComponent里的section和slot

    Page包含slots,slots包含Components. Spartacus使用page template来组织slots和Components. 一个page template包含了一些可被全局 ...

  6. 在SAP Spartacus产品明细页面用outlet显示自定义数据

    首先创建一个新的Angular module和Component: 这个新的module,因为要使用Outlet功能,所以需要从@Spartacus/storefront里导入OutletRefMod ...

  7. 如何让SAP Spartacus的非英语页面正常显示

    如下图所示,当修改Spartacus的语言成德语时,我们在界面上看到很多用大括号包裹起来的占位符,这些占位符是Spartacus internationalization(i18n)支持的resour ...

  8. SAP Spartacus split view控制同屏显示最大视图数的配置

    位于文件_split-view.scss内: 修改–cx-max-views的值.改为1的效果,同屏只允许最多一个view处于激活状态: 修改成3: 同屏最多显示3个视图: 更多Jerry的原创文章, ...

  9. SAP Spartacus产品明细页面用Observable显示产品名称

    具体实现: import { Component, OnInit } from '@angular/core'; import { ActiveCartService, Product } from ...

最新文章

  1. 训练不出结果_智能训练仪:专业化智能防控近视训练设备
  2. 百度云满速下载(转)
  3. ajax传递参数与controller接收参数映射关系
  4. pom.xml错误:org.codehaus.plexus.archiver.jar.Manifest.write(java.io.PrintWriter)的解决方法
  5. 页面嵌套除了iframe还能用什么方法_CTF|有关CSP绕过的方法
  6. 【收藏】go博客 zxysilent / blog
  7. 如何查看linux系统的密码是多少,如何在Linux系统查询SAM密码
  8. 大话设计模式—状态模式
  9. 直接运行内存中的代码
  10. MySQL服务器硬件和操作系统调节
  11. 分表分库时机选择及策略
  12. c语言判断整数_C语言技能|(草稿,不断完善中...)
  13. ubuntu 安装 virt-manager 虚拟机
  14. 初学者学习Java 的软件有哪些?
  15. linux离线安装及配置redis
  16. 15 个为编程初学者准备的网站
  17. Stimulsoft Reports.Net 2022.2.1
  18. 电视机未来会成为家庭交互中心?
  19. 了解原型设计工具:墨刀
  20. tp6框架结合阿里短信接口发送短信并记录redis

热门文章

  1. Xtract 实现 VMware Vsphere 迁主机到 Nutanix cluster
  2. [Python]程序结构与控制流
  3. Mvp快速搭建商城购物车模块
  4. IOS 手机助手及越狱助手推荐
  5. 华为交换机-端口由trunk改为access
  6. Android手机WIFI与电脑间共享文件
  7. 1491. Look and Say
  8. 关于程序中的需求的变化,责任的分配
  9. 2009年9月等考试题及答案51CTO站第一时间发布
  10. 转帖:ESB(Enterprise Service Bus)