在 Storefront AppModule 构造函数里注入 ActiveCartService:

private cartService: ActiveCartService,


调用其 API:

const loading$ = this.cartService.getLoading();loading$.subscribe((data) => console.log('Jerry cart loading? ', data));

打印出的日志:

active-cart.service.d.ts 里,仅仅包含方法的参数定义:

如果要查看其实现代码,还是得去 fesm2015 的 Spartacus-core.js 文件里查看:

getLoading(): Observable<boolean> {return this.cartSelector$.pipe(map((cartEntity) => cartEntity.loading),distinctUntilChanged());}

查看 this.cartSelector$ 的实现:

// Stream with active cart entityprotected cartSelector$ = this.activeCartId$.pipe(switchMap((cartId) => this.multiCartService.getCartEntity(cartId)));

cartSelector$ 的赋值逻辑:从 activeCartId$ 里取出 cartId,调用 multiCartService 读取。

MultiCartService 也只是从 store 里通过selector 去读取。

ActiveCartId$ 的赋值逻辑:

// This stream is used for referencing carts in API calls.protected activeCartId$ = this.userIdService.getUserId().pipe(// We want to wait with initialization of cartId until we have userId initialized// We have take(1) to not trigger this stream, when userId changes.take(1),switchMapTo(this.store),select(MultiCartSelectors.getActiveCartId),// We also wait until we initialize cart from localStorage. Before that happens cartId in store === nullfilter((cartId) => cartId !== activeCartInitialState),map((cartId) => {if (cartId === '') {// We fallback to current when we don't have particular cart id -> cartId === '', because that's how you reference latest user cart.return OCC_CART_ID_CURRENT;}return cartId;}));

在这个文件处加上一行打印语句:

果然看到这条语句了:

为什么初始的 loading 标志位为 true?

通过调试代码得知:

这个 LoadCart 继承了 EntityLoadAction,所以也继承了默认的 load:true 标志位。

那么什么时候又变成 false 呢?

调用栈看完了都没看到有 Spartacus 相关的代码:

只知道肯定发生在 Load Cart Success 之后。

从 map.js 里看到了线索:这个 value 里包含了购物车 cart 的业务数据:

以及 loading:false

这是我们的应用代码:

从 Cart selector 里取出 CartEntity,调用 map,将 loading 字段映射出来:

Cart 数据结构:

从这里也能说明,一定是 Load Cart Success 触发的第二次 loading 打印:

此时 cart 数据已经回来了,loading 为 false:

更多Jerry的原创文章,尽在:“汪子熙”:

如何获取 SAP Commerce Cloud Spartacus UI 购物车 Cart 的加载状态相关推荐

  1. SAP Commerce Cloud Spartacus UI 的购物车 Cart 功能

    此功能是在 TUA Spartacus 库的 1.0 版中引入的. 购物车在 TUA Spartacus 与核心 Commerce Spartacus 中的工作方式不同,需要支持产品供应以及复杂的定价 ...

  2. SAP Commerce Cloud Spartacus UI 的 ActionClass 数据结构设计

    以 CmsSetPageSuccessIndex 为例: 运行时该 Action 类包含三大字段: (1) meta (2) payload (3) type meta meta 包含的 loader ...

  3. SAP Commerce Cloud Spartacus UI 4.0.1 版本的安装

    官方文档 使用命令行创建一个基于 Angular 12 的 应用: ng new mystore --style=scss 务必注意 SAP Spartacus 4 以上的安装环境要求: 然后命令行调 ...

  4. SAP Commerce Cloud Spartacus UI footer 区域的设计模型

    本文研究如下图高亮所示的 SAP 电商云 Footer 区域的设计明细. 对应的 HTML markdup 入口:cx-footer-navigation: cx-footer-navigation ...

  5. SAP Commerce Cloud Spartacus UI 修改 primary color 的方法

    问题 解答 The easiest and recommended way to override basic primary colors, as of version 4.0, is by cha ...

  6. SAP Commerce Cloud Spartacus UI 的高阶 reducer 设计

    在 components.reducer.ts 里,loaderReducer 函数,会根据输入的 entityType,返回一阶 reducer. 然后在代码第86行,调用该一阶 reducer 进 ...

  7. SAP Commerce Cloud Spartacus UI 读取 Component 元数据的 Action 设计

    先看数据:该 page 包含了 35 个 Components: 可以看到这些 Components 属于 homepage,但是 payload 字段里,只包含了 35 个 Components 其 ...

  8. SAP Commerce Cloud 新一代 UI Spartacus 和 Customer Data cloud 的集成

    SAP Customer Data Cloud Integration Spartacus 3.2 版可用. SAP Customer Data Cloud 允许您启用自定义注册和登录,还可以管理用户 ...

  9. SAP Commerce Cloud (电商云) UI 的懒加载功能

    最近工作中处理了 SAP Commerce Cloud (电商云) UI 的一个懒加载 (Lazy Load) 功能的问题,这里把自己学到的东西做个记录. UI 懒加载,有时又称惰性加载,延迟加载,是 ...

最新文章

  1. 学Python真的可以无所欲为,连对门小姐姐的家wifi密码都可以破解
  2. [20180408]那些函数索引适合字段的查询.txt
  3. WPF 10天修炼 第四天- WPF布局容器
  4. Java多线程_JUC包下的阻塞队列
  5. 左右侧边栏固定宽,中间宽度自适应
  6. Foundation 6 – 先进的响应式的前端开发框架
  7. paip.powerdesign cdm pdm文件 代码生成器 java web 页面 实现
  8. C# 第三方控件 错误 LC-1
  9. 【实习周记】ArrayMap源码分析
  10. 【毕设狗】【单片机毕业设计】基于单片机的智能垃圾桶设计-实物设计
  11. 获取chrome的network内容并选择下载其中的资源
  12. LaTeX数学公式-详细教程
  13. cruzer php sandisk 闪迪u盘量产工具_sandisk量产工具(闪迪U盘量产工具) 1.4
  14. 【色彩管理】HSI色彩模式详解
  15. oracle floor
  16. 大数据千亿级离线数仓项目第三天 维度数据分析与业务开发
  17. YOLO系列知识点整理
  18. 西门子SCL---S7通信
  19. 利用selenium尝试爬取豆瓣图书
  20. 并发(concurrency)和并行(parallelism)的区别

热门文章

  1. win7/WIN8.1(x64) 下使用MSDE WIN10不行
  2. 编写高质量代码:改善Java程序的151个建议(第3章:类、对象及方法___建议36~40)
  3. 剖析Disruptor:为什么会这么快?(一)锁的缺点
  4. CSDN下载频道2014年11月4日本-5日常维护公告
  5. 安装linux桌面总结
  6. 一个应用程序和另一个应用程序apk文件信息
  7. linux查找替换grep以及正则表达式
  8. [2018HN省队集训D8T1] 杀毒软件
  9. bzoj3144: [Hnoi2013]切糕(最小割)
  10. 2016年3月1日Android实习笔记