当前位置: 首页 > Web前端 > HTML5

本地存储SAP电商云SpartacusUICartID

时间:2023-04-05 17:31:30 HTML5

IsStable:firstfalse,thentrue@NgModule()exportclassCartPersistenceModule{staticforRoot():ModuleWithProviders{return{ngModule:CartPersistenceModule,providers:[{provide:APP_INITIALIZER,useFactory:cartStatePersistenceFactory,deps:[MultiCartStatePersistenceService,ConfigInitializerService],multi:true,},提供的函数在app启动时注入,app初始化时执行。如果这些函数中的任何一个返回一个Promise或Observable,初始化将不会完成,直到Promise解析或Observable完成。例如,我们可以创建一个加载语言数据或外部配置的工厂函数,并将该函数提供给APP_INITIALIZER令牌。此函数在应用程序引导期间执行,所需数据在启动时可用。应用初始化时,调用cartStatePersistenceFactory:Angular框架调用所有app初始化器:这个init需要返回一个promise对象:订阅者的next方法会在toPromise对象中调用:调用cartStatePersistenceService.initSync():购物车信息为storedinlocalstorage:fromDataretrievedfromlocalstorage:generatekey:nobrowserstorageinSSRmode:检索当前活跃的cartidstoredinthebrowser'slocalstorage:2007,也就是下图中高亮显示的cartid:differentbase网站,对应的购物车ID不一致。拿到cartid后,调用onRead方法:首先清除Cart状态:进入scheduleMessage,即使用store进行Actiondispatch,这很可能是一个异步过程。但是没有进入异步调度的分支:直接调用scheduler的flush方法:调用Observer的next方法:重新计算state,保存结果:computedStates=recomputeStates(computedStates,minInvalidatedStateIndex,reducer,committedState,actionsById,stagedActionIds,skippedActionIds,errorHandler,isPaused);monitorState=monitorReducer(monitorState,liftedAction);上一个状态:调用reducer计算下一个状态:这是Spartacus实现的reducer:LOAD_CMS_PAGE_DATA_SUCCESS:{constpage:Page=action.payload;返回{...state,entities:{...state.entities,[page.pageId]:page}};}}returnstate;}会依次执行很多对应的reducer: