0
点赞
收藏
分享

微信扫一扫

SAP 电商云 Spartacus UI External Route 的模块实现概述


我们在 SAP Spartacus AppModule 里进行如下的 External Route 配置之后:

SAP 电商云 Spartacus UI External Route 的模块实现概述_初始化

provideConfig({
routing: {
internal: [
'/**',
'!/cart',
'!/**/p/**'
]
}
}),

一旦访问 Spartacus Cart url,从 Chrome 开发者工具 network 里就能观察到,整个应用不停的自刷新。

整个实现位于 routing 文件夹下:

SAP 电商云 Spartacus UI External Route 的模块实现概述_chrome_02

在 ​​ExternalRoutesService​​ 里加上调试代码:

SAP 电商云 Spartacus UI External Route 的模块实现概述_javascript_03

运行时观察到的输出:

SAP 电商云 Spartacus UI External Route 的模块实现概述_前端_04

ExternalRoutesService 里的 ​​addRoutes​​ 方法,职责是为 redirect 到另一个 Storefront 系统,设置新的 Routes 配置:

SAP 电商云 Spartacus UI External Route 的模块实现概述_初始化_05

加上一行打印语句:

SAP 电商云 Spartacus UI External Route 的模块实现概述_angular.js_06

这个 addRoutes 方法是作为 Angular 应用的初始化器(initializers) 被调用的:

SAP 电商云 Spartacus UI External Route 的模块实现概述_初始化_07

上图第 34 行代码,调用 Service class 自己实现的 ​​getRoutes​​ 方法:

SAP 电商云 Spartacus UI External Route 的模块实现概述_chrome_08

然后从 injector 里取得 Routers 实例,进而取得当前已有的 routes 配置:

SAP 电商云 Spartacus UI External Route 的模块实现概述_angular.js_09

resetConfig API 的​​文档​​:

SAP 电商云 Spartacus UI External Route 的模块实现概述_前端_10

UrlMatcher 负责决定 external route 是否应当被 activated:

SAP 电商云 Spartacus UI External Route 的模块实现概述_angular.js_11

这个 getUrlMatcher 方法也是在 ​​addRoutes​​ 方法调用里执行的:

SAP 电商云 Spartacus UI External Route 的模块实现概述_chrome_12


SAP 电商云 Spartacus UI External Route 的模块实现概述_chrome_13

UrlMatcerService:

SAP 电商云 Spartacus UI External Route 的模块实现概述_javascript_14

什么是 Glob like service?

SAP 电商云 Spartacus UI External Route 的模块实现概述_javascript_15

Glob,也称为 glob 模式,是可以将通配符模式扩展为与给定模式匹配的路径名列表的模式。
在 Linux 的早期版本中,命令解释器依赖于一个程序,该程序将这些字符扩展为命令的不带引号的参数:/etc/glob。
该命令后来作为库函数提供,现在被大量程序使用,包括 shell。 几种不同的工具和语言已经采用了 glob,并对其进行了小小的改动。 比如:

  • Node.js
  • Go
  • Java
  • Haskell
  • Python
  • Ruby
  • PHP

Spartacus Glob Service 接收一个字符串数组作为输入参数,返回一个 validator 函数:

SAP 电商云 Spartacus UI External Route 的模块实现概述_前端_16

观察其调用栈,仍然是在 ​​addRoutes​​ 方法执行体内:

SAP 电商云 Spartacus UI External Route 的模块实现概述_chrome_17

仅当匹配任何正模式且没有负模式时,验证器才会为给定 URL 返回 true.


举报

相关推荐

0 条评论