货币和语言持久化在本地存储:app.config.ts?FailingE2Etests:ThesitecontexttestsarefailedFilesinvolved:currency-checkout-page.e2e-spec.tslanguage-checkout-page.e2e-spec.ts文件路径:projects\storefrontapp-e2e-cypress\cypress\integration\regression\site-context\currency\currency-cart-page.core-e2e-spec.ts中的一些相关函数和文件:default-site-context-config.tssite-context-config-initializer.tsSiteContext是一个接口,定义了三个方法:导出接口SiteContext{getAll():Observable;getActive():Observable<字符串>;setActive(isocode:string);}站点上下文的实现位于核心文件夹中。选择器是用于获取存储状态切片的纯函数,在Spartacus源代码实现中被广泛使用。像往常一样,商店分为几个子文件夹。导入EffectsModule和StoreModule这两个模块:注意StoreModule.forFeature的第二个参数,传入一个ActionReducerMap或者InjectionToken:在Spartacus中,我们使用一个InjectionToken:exportconstreducerToken:InjectionToken>=newInjectionToken>('SiteContextReducers');token对应的provider在下图中第34行代码处:这个provider是通过工厂函数提供的:在应用初始化的时候会执行:在AngularRouting和ngx-bootstrap的字段中,forRoot帮助在指令和组件的多个实例之间共享提供程序,以解决应用程序的全局问题。例如,ngx-bootstrap将此约定用于模态对话框组件。虽然应用程序的标记中可能定义了许多模态实例,但模态会接管整个UI。在路由的情况下,应用程序只有一个window.location,因此即使可能有各种实例,它们都需要对窗口位置的全局依赖,以便它们一起工作。总之,forRoot()约定代表了一种使用ModuleWithProviders接口导入NgModule及其提供者的方法。当一个NgModule特性导出需要共享同一个自定义提供者实例的组件和指令时,考虑使用forRoot()方法在根NgModule中注册这些提供者。这有助于确保所有子NgModule都可以访问同一个提供者实例,而无需消费者显式处理提供者注册。