SAP 电商云 Spartacus UI SiteContextRoutesHandler 的技术实现明细介绍

简介: SAP 电商云 Spartacus UI SiteContextRoutesHandler 的技术实现明细介绍

site-context-routes-handler.ts (SiteContextRoutesHandler)

三个依赖:

image.png

site context state 和 url 之间存在双向同步关系。

init

init() {
    this.router = this.injector.get<Router>(Router);
    this.location = this.injector.get<Location>(Location);
    const routingParams = this.siteContextParams.getUrlEncodingParameters();
    if (routingParams.length) {
      this.setContextParamsFromRoute(this.location.path(true));
      this.subscribeChanges(routingParams);
      this.subscribeRouting();
    }
  }

上述代码,调用 getUrlEncodingParameters 获取参数列表:

image.png

然后从 this.location.path 得到当前浏览器地址栏里的 url,从 url /electronics-spa/en/USD 里提取出参数。

image.png

setContextParamsFromRoute

从 url 里解析参数,然后更新 site context state

解析出的参数是一个 JSON 对象:

image.png

根据参数名称,从 service map 里获取对应的 service 实例,然后调用 setValue 方法。

image.png

还是 facade 层的 setActive 方法:

image.png

最后在 reducer 里返回一个新的状态(有限状态自动机):

10.png

注意 callstack:

11.png

subscribeChanges

site context 发生变化之后,我们需要采用编程的方式,更新浏览器地址栏里的 url.

例子:当我从 language 下拉菜单里将语言从英语更改到中文时,断点立即触发:

12.png

此时 router url 里已经出现了 zh,这个值是什么时候写入的?

13.png

14.png

这行代码 this.location.replaceState(serialized); 单步执行之后,地址栏立即出现了zh:

15.png

语言发生变化之后,如何同步到浏览器地址栏的 url 字段?

16.png切换成中文后,this.router.url 片段里,已经出现了 zh,这是一个 get 实现:

17.png

调试器显示,这个 get 的执行根本还没结束:

19.png

上图是 Angular 框架代码,url 是通过 this.serializeUrl(this.currentUrlTree) 动态计算出来的。

router 的 urlSerializer 是我们动态注入进去的:

20.png

这里就开始执行我们自己的业务逻辑了:

21.png

params 参数为空:

22.png

segment,query 和 fragment 全部为空:

23.png24.png

然后再从 urlEncodingParameters 里依次将 baseSite,language 和 currency 最新的参数值读取出来:

25.png

既然传进来的 params 里没有数据,就调用 SiteContextParamsService 读取参数值:

image.png

现在调用的就是 services 文件夹下的实现,之前已经了解过了:

27.png

从 service map 里读取数据:

28.png

29.png

所以 router 最后的值进行了更新:electronics-spa/zh/USD/

30.png





目录
相关文章
|
1月前
|
前端开发 JavaScript API
SAP UI5 sap.ui.require.toUrl 的作用介绍
SAP UI5 sap.ui.require.toUrl 的作用介绍
|
1月前
|
JSON 前端开发 测试技术
SAP UI5 sap.ui.core.util.MockServer.simulate 方法介绍
SAP UI5 sap.ui.core.util.MockServer.simulate 方法介绍
使用 SAP UI5 Event Bus 机制,修复 SAP UI5 分页显示数据的一个 bug 试读版
使用 SAP UI5 Event Bus 机制,修复 SAP UI5 分页显示数据的一个 bug 试读版
|
1月前
|
缓存 JavaScript 前端开发
如何理解 SAP UI5 的 sap.ui.define 函数?
如何理解 SAP UI5 的 sap.ui.define 函数?
|
8月前
|
Web App开发 资源调度 JavaScript
SAP Fiori Elements 应用里的 ui5.yaml 文件详解试读版
SAP Fiori Elements 应用里的 ui5.yaml 文件详解试读版
|
1月前
|
监控 测试技术
SAP 电商云修改 Product Catalog Staged 版本数据后,同步到 online 版本的 UI 操作
SAP 电商云修改 Product Catalog Staged 版本数据后,同步到 online 版本的 UI 操作
什么是 SAP ABAP 里的 Subscreen
什么是 SAP ABAP 里的 Subscreen
什么是 SAP ABAP 里的 Subscreen
|
1月前
|
中间件
SAP UI5 Tooling 实战:动手创建自己的 Custom UI5 Server Middleware 试读版
SAP UI5 Tooling 实战:动手创建自己的 Custom UI5 Server Middleware 试读版
SAP UI5 Tooling 实战:动手创建自己的 Custom UI5 Server Middleware 试读版
|
1月前
|
JSON 数据格式
SAP UI5 Class sap.ui.model.Context 的作用介绍
SAP UI5 Class sap.ui.model.Context 的作用介绍
|
1月前
|
存储 缓存 前端开发
关于 SAP Spartacus Optimization Engine 里的 cache 参数使用注意事项
关于 SAP Spartacus Optimization Engine 里的 cache 参数使用注意事项

热门文章

最新文章