首页 > 其他分享 >combineLatest 操作符在 Spartacus Cost Center 计算逻辑中的一个实际应用

combineLatest 操作符在 Spartacus Cost Center 计算逻辑中的一个实际应用

时间:2023-09-14 09:47:02浏览次数:32  
标签:combineLatest Spartacus 对象 costCenters Cost 操作符 costCenter 观察

考虑下面这段 Angular 代码:

this.costCenters$ = combineLatest([
      this.userCostCenters$,
      this.checkoutCostCenterFacade.getCostCenterState().pipe(
        filter((state) => !state.loading),
        map((state) => state.data),
        distinctUntilChanged()
      ),
    ]).pipe(
      take(1),
      tap(([costCenters, costCenter]) => {
        if (!costCenter) {
          this.setCostCenter(costCenters[0].code as string);
        } else {
          this.costCenterId = costCenter.code;
        }
      }),
      map(([costCenters]) => costCenters)
    );

这段代码是一个 Angular 组件中的 TypeScript 代码片段,它主要处理一个名为 costCenters$ 的可观察对象(Observable)。这个可观察对象最终会包含一组成本中心数据。

首先,让我们从代码的最顶部开始分析:

  1. this.costCenters$ 是一个类成员变量,它代表一个可观察对象(Observable),用于保存成本中心数据。这个可观察对象最终会发出一组成本中心数据。

  2. combineLatest 是一个 RxJS 操作符,它接受一个数组作为参数,这个数组中包含多个可观察对象,并在这些可观察对象发出新值时将这些值组合成一个数组。在这段代码中,它接收了两个可观察对象:this.userCostCenters$this.checkoutCostCenterFacade.getCostCenterState()

    • this.userCostCenters$ 可观察对象可能代表用户的成本中心数据。

    • this.checkoutCostCenterFacade.getCostCenterState() 也是一个可观察对象,它用于获取结账成本中心的状态数据。这里使用了一系列 RxJS 操作符来对该可观察对象进行处理,包括 filtermap

    • filter 操作符用于筛选出满足特定条件的值。在这里,它用于过滤出状态对象 stateloading 属性为 false 的情况。

    • map 操作符用于将状态对象 state 转换成其 data 属性的值。

  3. distinctUntilChanged 是另一个 RxJS 操作符,它确保只有在新值与前一个值不相同时才发出新值。这是为了避免发出重复的数据。

  4. 整个 combineLatest 操作符被用于组合 this.userCostCenters$this.checkoutCostCenterFacade.getCostCenterState() 的数据,并在它们中的任何一个发出新值时触发。

接下来,代码继续进行管道操作(pipe):

  1. take(1) 操作符用于限制只接收第一个值,然后完成可观察对象。这是为了确保我们只关心初始值,并避免后续值的干扰。

  2. tap 操作符用于执行一些副作用操作,不会改变数据流。在这里,它接收一个回调函数,该函数会在新的 costCenterscostCenter 值可用时执行。这段代码的主要目的是根据条件设置成本中心。

    • 如果 costCenter 不存在(即为假值),则选择 costCenters 数组中的第一个元素,并将其 code 属性作为字符串设置为成本中心。
    • 如果 costCenter 存在(即为真值),则将 costCentercode 属性设置为成本中心。
  3. 最后,map 操作符用于从管道中的元组 [costCenters] 中提取出 costCenters 数组,以便最终的 this.costCenters$ 只包含成本中心数据而不是元组。

总结起来,这段代码的主要作用是:

  • 使用 combineLatest 操作符将两个可观察对象的数据合并成一个数组。
  • 使用 distinctUntilChanged 操作符确保只在数据发生变化时才发出新值。
  • 使用 take(1) 确保只接收初始值。
  • 使用 tap 执行条件逻辑以设置成本中心。
  • 使用 map 提取出最终的成本中心数据。

这段代码的核心目标是为 this.costCenters$ 提供一个包含成本中心数据的可观察对象,同时确保数据的一致性和准确性。在 Angular 组件中,这种数据处理通常用于动态更新界面或执行其他与数据相关的操作。

标签:combineLatest,Spartacus,对象,costCenters,Cost,操作符,costCenter,观察
From: https://www.cnblogs.com/sap-jerry/p/17701435.html

相关文章

  • Spartacus 如何动态将 SmartEdit attribute 添加到 DOM 里,单步调试
    从Spartacus发起的basesiteocc请求的response获取当前site的数据:从CMSpage的response结果里得到的properties:使用renderer往DOM元素上添加attribute:在这个DynamicAttributeService里设置断点。Angular是一种流行的前端框架,它提供了一套强大的工具......
  • 如何找到 Spartacus 动态加载 library 的准确实现地址
    Spartacus里SmartEditFeatureModule这段实现代码:import{NgModule}from'@angular/core';import{CmsConfig,provideConfig}from'@spartacus/core';import{SmartEditRootModule,SMART_EDIT_FEATURE,}from'@spartacus/smartedit/ro......
  • m基于FPGA的costas环载波同步verilog实现,包含testbench,可以修改频偏大小
    1.算法仿真效果其中Vivado2019.2仿真结果如下: 没有costas环,频偏对基带数据的影响   加入costas环的基带数据   2.算法涉及理论知识概要        Costas环是一种用于载波同步的常见方法,特别是在调制解调中,它被广泛用于解调相位调制信号,如二进制调相(BPS......
  • 如何找到 Spartacus 动态加载 library 的准确实现地址
    Spartacus里SmartEditFeatureModule这段实现代码:import{NgModule}from'@angular/core';import{CmsConfig,provideConfig}from'@spartacus/core';import{SmartEditRootModule,SMART_EDIT_FEATURE,}from'@spartacus/smartedit/ro......
  • javascript: confirm alert box costomer style
     //JavaScriptDocument/*參考資源:https://developer.mozilla.org/en-US/docs/Web/API/Window/alerthttps://developer.mozilla.org/en-US/docs/Web/API/Window/confirmhttps://reactkungfu.com/2015/08/beautiful-confirm-window-with-react/https://www.jquery-az.co......
  • 什么是 Spartacus Storefront B2B store 的 My Company 菜单
    Spartacus是一个基于Angular的开源JavaScriptweb应用,与SAPCommerceCloud的RESTAPI进行交互。它的目标是提供一个稳定、可靠、可扩展的前端解决方案,让开发者能够创建全功能的商店,同时避免了与后端系统的紧密耦合。其中,B2Bstore是一个专门为B2B交易设计的商店,而My......
  • IfcCostValue
    IfcCostValue实体定义IfcCostValue是一个金额或影响金额的值。IfcCostValue的每个实例也可能有一个类别。可以识别出许多可能类型的成本价值。虽然人们对可能分配给不同类型成本的名称的含义有着广泛的理解,但对成本类型的命名没有通用标准,也没有任何广义的分类。以下定义了一......
  • Spartacus 添加 PWA 应用到 home 的实现原理分析
    代码位置:https://github.com/SAP/spartacus/blob/develop-6.4.x/projects/storefrontlib/cms-structure/pwa/services/add-to-home-screen.service.ts这段Angular代码是一个用于添加到主屏幕(AddtoHomeScreen)功能的服务,它是为Spartacus项目中的PWA模块设计的。PWA代表Progressi......
  • borrow cost, the funding spread and the tax adjustment
    http://www.wilmott.com/messageview.cfm?catid=38&threadid=44884NicoLondonJuniorMemberPosts:15Joined:Feb2005WedJan10,0711:25AMHiall,IreadinanarticlethattheAssetSwapSpreadcouldbedefinedasthesumofthreecomponents:the......
  • m基于QPSK+LDPC的载波同步和定时同步matlab性能仿真,包括Costas和gardner环,LDPC,四倍
    1.算法仿真效果matlab2022a仿真结果如下:本程序在博主之前的《基于QPSK的载波同步和定时同步性能仿真,包括Costas环的gardner环》算法基础上,加入了LDPC编译码进行仿真。2.算法涉及理论知识概要载波同步是相干解调的基础,不管对于模拟通信还是数字通信来说,只要是相干解调,接收端......