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


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

        provideConfig({
          routing: {
            internal: [
              '/**',
              '!/cart',
              '!/**/p/**'
            ]
          }
        }),
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

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

    ExternalRoutesService 里加上调试代码:

    运行时观察到的输出:

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

    加上一行打印语句:

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

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

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

    resetConfig API 的文档

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

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


    UrlMatcerService:

    什么是 Glob like service?

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

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

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

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

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

  • 相关阅读:
    区间预测 | Matlab实现CNN-ABKDE卷积神经网络自适应带宽核密度估计多变量回归区间预测
    LeetCode 热题 HOT 100 第八十三天 438. 找到字符串中所有字母异位词 III 用python3求解
    动态链接函数(dlopen/dlsym/dlclose)使用总结
    LeetCode904-水果成篮
    VUE3-博客全栈 08-前端
    shell编程基础(第10篇:字符串)
    JS的正则表达式
    Python编辑器的选择配置和使用
    js建树、遍历操作
    【一、虚拟机vmware安装】
  • 原文地址:https://blog.csdn.net/i042416/article/details/127733221