SAP Spartacus Site Context 实现专题页面(四)

简介: SAP Spartacus Site Context 实现专题页面

providers

index.ts 里只有两份 export:

44.png

context-ids.ts

是一些参数常量。

export const LANGUAGE_CONTEXT_ID = 'language';
export const CURRENCY_CONTEXT_ID = 'currency';
export const BASE_SITE_CONTEXT_ID = 'baseSite';
export const THEME_CONTEXT_ID = 'theme';

context-service-map.ts (ContextServiceMap)

ContextServiceMap 是一个 map 结构,key 是字符串,value 是这种 site context 对应的 SiteContext Facade 类?

image.png

比如我们之前在 facade 文件夹里讨论过的:

@Injectable()
export class CurrencyService implements SiteContext<Currency> {
  constructor(
    protected store: Store<StateWithSiteContext>,
    protected config: SiteContextConfig
  ) {}

serviceMapFactory

工厂函数,负责提供 ContextServiceMap 的实现?

45.png

什么时候 ContextServiceMap 的实例会被调用到?

46.png

这里只有类的定义,并没有类的实例化过程:

47.png

site-context-params-providers (siteContextParamsProviders)

这个类没有被 index.ts 导出。从注释也能看出,这是有意为之,不将其暴露到 public API 去。

import { Provider } from '@angular/core';
import { UrlSerializer } from '@angular/router';
import { SiteContextParamsService } from '../services/site-context-params.service';
import { SiteContextUrlSerializer } from '../services/site-context-url-serializer';
// functions below should not be exposed in public API:
export const siteContextParamsProviders: Provider[] = [
  SiteContextParamsService,
  SiteContextUrlSerializer,
  { provide: UrlSerializer, useExisting: SiteContextUrlSerializer },
];

提供了一些 provider 的实现,SiteContextUrlSerializer 提供了 Angular UrlSerializer 的实现。

context-service-providers.ts

initializeContext

这个函数就是一个包裹函数,从 site-context 平级的 config 文件夹里导入 ConfigInitializerService 和 site-context 内部的 service 文件夹内的 SiteContextRoutesHandler,然后调用这两个导入的函数的对应方法。

48.png

回答两个问题:

(1) initializeContext 函数什么时候被调用?

这个调用又分为两个维度来讨论。

image.png

第13行的代码,在 Angular 依赖注入框架内执行:

image.png

这比较合理,因为就在这个文件的尾部,initializeContext 作为 APP_INITIALIZER 被调用。

50.png

稍后,Angular APP_INITIALIZER 所有的 provider 也被调用:

51.png

(2) 这个函数的 23 行 init 方法执行了什么逻辑?

这个 init 方法,就是 services 问就按家里的实现,即通过 url 里包含的 language 和 currency 参数,设置 site context 的过程。

52.png

context-initializer-providers.ts

注册了 APP_INITIALIZER 的 provider.

53.png



48.png


目录
相关文章
|
前端开发 UED 开发者
SAP Spartacus 开源项目中 $skipComponentStyles 的作用介绍
SAP Spartacus 开源项目中 $skipComponentStyles 的作用介绍
185 0
Spartacus Storefront 产品明细页面里的 Add to Wish 动态隐藏问题(3)
Spartacus Storefront 产品明细页面里的 Add to Wish 动态隐藏问题
|
JSON 数据格式
Spartacus Storefront 产品明细页面里的 Add to Wish 动态隐藏问题(2)
Spartacus Storefront 产品明细页面里的 Add to Wish 动态隐藏问题
Spartacus Storefront 产品明细页面里的 Add to Wish 动态隐藏问题(1)
Spartacus Storefront 产品明细页面里的 Add to Wish 动态隐藏问题
SAP 电商云 Spartacus UI Configurable Product 的页面设置(3)
SAP 电商云 Spartacus UI Configurable Product 的页面设置
|
运维 监控 Kubernetes
SAP MTA 里定义 SAP UI5 module 的一个例子
SAP MTA 里定义 SAP UI5 module 的一个例子
|
XML JSON 数据格式
SAP UI5 XML 视图中数据绑定路径语法的难点和易混淆点的专题讲解
SAP UI5 XML 视图中数据绑定路径语法的难点和易混淆点的专题讲解
|
JavaScript 前端开发
SAP UI5 里 FlexBox 控件使用的一个例子
SAP UI5 里 FlexBox 控件使用的一个例子
|
前端开发
关于 SAP UI5 应用 render2 实例异步创建的编码实现(2)
关于 SAP UI5 应用 render2 实例异步创建的编码实现
关于 SAP UI5 应用 render2 实例异步创建的编码实现(1)
关于 SAP UI5 应用 render2 实例异步创建的编码实现