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

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

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

三个依赖:

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 获取参数列表:

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

setContextParamsFromRoute

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

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

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

还是 facade 层的 setActive 方法:

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

注意 callstack:

subscribeChanges

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

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

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

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

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

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

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

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

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

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

params 参数为空:

segment,query 和 fragment 全部为空:

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

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

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

从 service map 里读取数据:

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

相关文章
|
2月前
|
vr&ar C# 图形学
WPF与AR/VR的激情碰撞:解锁Windows Presentation Foundation应用新维度,探索增强现实与虚拟现实技术在现代UI设计中的无限可能与实战应用详解
【8月更文挑战第31天】增强现实(AR)与虚拟现实(VR)技术正迅速改变生活和工作方式,在游戏、教育及工业等领域展现出广泛应用前景。本文探讨如何在Windows Presentation Foundation(WPF)环境中实现AR/VR功能,通过具体示例代码展示整合过程。尽管WPF本身不直接支持AR/VR,但借助第三方库如Unity、Vuforia或OpenVR,可实现沉浸式体验。例如,通过Unity和Vuforia在WPF中创建AR应用,或利用OpenVR在WPF中集成VR功能,从而提升用户体验并拓展应用功能边界。
36 0
|
3月前
|
编解码 前端开发 图形学
【技术深度解析】多平台适配下的UI适配难题:U3D游戏UI错乱的终极解决方案
【7月更文第12天】随着移动设备市场的多元化,Unity游戏开发者面临的一大挑战是如何在不同分辨率和屏幕尺寸的设备上保持UI的一致性和美观性。游戏在高分辨率平板与低分辨率手机上呈现出的UI布局混乱、按钮错位等问题,严重影响玩家体验。本文旨在探讨Unity UI(UGUI)在多平台适配中的最佳实践,通过优化Canvas Scaler设置、灵活运用RectTransform和Anchor Points,以及高效利用设计工具,确保UI的完美适配。
312 1
|
5月前
|
监控 测试技术
SAP 电商云修改 Product Catalog Staged 版本数据后,同步到 online 版本的 UI 操作
SAP 电商云修改 Product Catalog Staged 版本数据后,同步到 online 版本的 UI 操作
|
5月前
|
存储 监控 数据库
SAP 电商云 product catalog 从 staged 到 online 两个版本之间的同步
SAP 电商云 product catalog 从 staged 到 online 两个版本之间的同步
|
5月前
|
监控 安全 数据管理
SAP 电商云 Product catalog 的 staged 和 online 两种版本的设计理念
SAP 电商云 Product catalog 的 staged 和 online 两种版本的设计理念
什么是 SAP ABAP 里的 Subscreen
什么是 SAP ABAP 里的 Subscreen
什么是 SAP ABAP 里的 Subscreen
|
5月前
|
开发框架 前端开发 JavaScript
【Flutter前端技术开发专栏】Flutter中的动态UI构建与数据驱动视图
【4月更文挑战第30天】Flutter是一款高效跨平台移动开发框架,以其热重载、高性能渲染和丰富组件库著称,简化了动态UI和数据驱动视图的实现。本文深入讨论了动态UI构建原理,包括基于Widget树模型的UI更新和状态管理,如使用StatefulWidget和数据流库(如Provider、Redux)。此外,文中还介绍了实现技巧,如使用ListView等可滚动组件、StreamBuilder进行数据流驱动的UI更新,以及应用响应式布局以适应不同设备。Flutter为开发者提供了构建高效动态界面的强大工具。
135 0
【Flutter前端技术开发专栏】Flutter中的动态UI构建与数据驱动视图
|
5月前
|
前端开发 测试技术 持续交付
【Flutter 前端技术开发专栏】Flutter 中的 UI 测试与自动化测试
【4月更文挑战第30天】本文探讨了 Flutter 应用中UI测试和自动化测试的重要性,包括保障质量、提高效率和增强开发信心。Flutter提供`flutter_test`库进行Widget测试,以及`flutter_driver`进行集成测试。UI测试涵盖界面布局、交互和状态变化的验证,最佳实践建议尽早引入测试、保持用例简洁,并结合手动测试。未来,随着Flutter技术发展,UI测试和自动化测试将更加完善,助力开发高质量应用。
147 0
【Flutter 前端技术开发专栏】Flutter 中的 UI 测试与自动化测试
|
5月前
|
前端开发 搜索推荐 UED
【Flutter前端技术开发专栏】Flutter中的高级UI组件应用
【4月更文挑战第30天】探索Flutter的高级UI组件,如`TabBar`、`Drawer`、`BottomSheet`,提升应用体验和美观度。使用高级组件能节省开发时间,提供内置交互逻辑和优秀视觉效果。示例代码展示了如何实现底部导航栏、侧边导航和底部弹出菜单。同时,自定义组件允许个性化设计和功能扩展,但也带来性能优化和维护挑战。参考Flutter官方文档和教程,深入学习并有效利用这些组件。
127 0
【Flutter前端技术开发专栏】Flutter中的高级UI组件应用
|
5月前
|
前端开发 搜索推荐 开发者
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
下一篇
无影云桌面