SAP Spartacus 里的 cxOutletRef 指令执行过程分析

简介: SAP Spartacus 里的 cxOutletRef 指令执行过程分析

先看 cxOutletRef 指令的效果:ng-template 里定义了如下图标 1 区域所示的自定义 UI,通过 cxOutletRef, 将其插入到图标 2 所示的 ProductDetailsPageTemplate里:

image.png

源代码:

image.png

运行时的效果:


image.png

查看源代码,发现该指令的有效实现不多,仅仅调用 OutletService.add 方法:


image.png


仔细阅读 add 方法的三个参数:


outlet:代表自定义 UI 插入的 UI 位置,通过字符串代表。可以将 template 或者 ComponentFactory 插入该字符串代表的 UI 位置。

image.png


tpl: 待插入的自定义 UI 所在的页面模板实例。


image.png


index.html 页面里只有一个 cx-storefront selector, 对应 StorefrontComponent:


image.png

Outlet.service.ts 里维护了一个字典结构,key 为 outlet 名称,值为 cxOutletRef 指令所在的 ng-template 实例。



image.png

Storefront Component refresh 时,会调用 hook,包含施加在其上的 Directive:


image.png

通过 Angular 标准的 ngOnChanges lifecycle hook,触发该 cxOutlet Directive 的 render 方法:


image.png


image.png

在渲染 embedded view 时,如果遇到该视图包含了 cxOutlefRef 指令,就触发依赖注入机制,生成该指令的实例。



image.png


image.png

从 Angular 内部变量 _lView 里,我们可以轻易辨别出当前 ng_template 实例代表的页面:

image.png



比如这个高亮的结构:

image.png


对应了 HTML 里这段 ng-template 声明:


image.png

而 div.after-pdp 及 text, JsonPipe 和 AsyncPipe:


image.png


对应 template 里这段代码:


image.png


直接在 .html 文件里设置断点:


image.png

在最新版本的 Chrome 里,这些断点可以直接触发了:

image.png


在渲染 cxOutletRef 指向的 ProductDetailsPageTemplate 时,会触发 outlet Directive 的 ngOnChanges 方法:


image.png


这一切,都归功于 SAP Spartacus 独特的设计,即所有 Angular Component,都通过 PageLayoutComponent 进行渲染:


image.pngimage.png



而 PageLayoutComponent 实现里,包含了 cxOutlet 的消费:


image.png

相关文章
|
4月前
|
人工智能 搜索推荐 Serverless
使用金庸的著作,来测试阿里通义千问最新开放的长文档处理功能
使用金庸的著作,来测试阿里通义千问最新开放的长文档处理功能
使用金庸的著作,来测试阿里通义千问最新开放的长文档处理功能
|
4月前
|
存储 前端开发
SAP UI5 federatedLogout 函数源代码分析
SAP UI5 federatedLogout 函数源代码分析
|
4月前
|
XML 存储 JSON
SAP UI5 XML Templating Preprocessor 的 template:with 指令使用介绍
SAP UI5 XML Templating Preprocessor 的 template:with 指令使用介绍
|
11月前
|
存储 对象存储
Spartacus 添加 PWA 应用到 home 的实现原理分析
Spartacus 添加 PWA 应用到 home 的实现原理分析
|
4月前
|
JavaScript
Spartacus 中的指令 ConfiguratorAttributeCompositionDirective
Spartacus 中的指令 ConfiguratorAttributeCompositionDirective
|
4月前
|
网络安全
实战分析 - 为什么有些 SAP ABAP 程序,启动之后界面有些按钮是灰色的试读版
实战分析 - 为什么有些 SAP ABAP 程序,启动之后界面有些按钮是灰色的试读版
|
4月前
|
XML JavaScript 数据格式
SAP UI5 XML Preprocessor 的工作原理和 instructions 指令详解
SAP UI5 XML Preprocessor 的工作原理和 instructions 指令详解
|
4月前
|
开发者
jQuery.Deferred 在 SAP UI5 源代码中的应用分析
jQuery.Deferred 在 SAP UI5 源代码中的应用分析
|
4月前
|
数据库
SAP ABAP 更新函数(Update Function Module)执行出错的原因分析试读版
SAP ABAP 更新函数(Update Function Module)执行出错的原因分析试读版
|
4月前
|
数据库
130. SAP ABAP 更新函数(Update Function Module)执行出错的原因分析
130. SAP ABAP 更新函数(Update Function Module)执行出错的原因分析