• Spartacus 注册和登录页面的实现细节


    先查看登录按钮的实现,选择器为 cx-register

    user-register.service.ts 里,使用了 command 模式,注意 uid 里的 +,并没有进行任何处理。

    command 最终投递到 occ-user-profile.adapter.ts 文件中的 register 方法里,调用 Angular HTTP Library 的 post 方法进行投递。注意上图45 行代码,Content-Type 的值为 application/json.

    Spartacus 事件服务提供了一个事件流,开发人员无需紧密集成到特定组件或模块即可使用这些事件流。事件系统在 Spartacus 中用于构建与第三方系统的集成,例如标签管理器和 Web 跟踪器。

    事件服务还允许开发人员解耦某些组件。 例如,我们可能有一个分派事件的组件,以及另一个对该事件作出反应的组件,而无需组件之间的任何硬依赖。

    事件服务利用 RxJs Observables 来驱动事件流。

    事件由 TypeScript 类驱动,它们是给定事件的签名并且可以被实例化。 下面是一个例子:

    import { CxEvent } from "@spartacus/core";
    export class CartAddEntryEvent extends CxEvent {
      cartId: string;
      userId: string;
      productCode: string;
      quantity: number;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    要观察给定类型的事件,可以获取事件类型的流,然后在需要时订阅它。 以下是 CartAddEntryEvent 调用的示例:

    constructor(events: EventService){}
    /* ... */
    
    const result$ = this.events.get(CartAddEntrySuccessEvent);
    result$.subscribe((event) => console.log(event));
    
    • 1
    • 2
    • 3
    • 4
    • 5

    如果开发人员需要的数据多于特定事件中包含的数据,则可以将此数据与其他流结合起来。 例如,我们可以从 facade 收集其他数据。

    下面是一个响应 添加到购物车事件 的示例,然后等待购物车稳定(因为 OCC 购物车需要从后端重新加载),然后将所有购物车数据附加到事件数据:

    constructor(
        events: EventService,
        cartService: ActiveCartService
        ){}
    /* ... */
    
    const result$ = this.events.get(CartAddEntrySuccessEvent).pipe(
        // When the above event is captured, wait for the cart to be stable
        // (because OCC reloads the cart after any cart operation)...
        switchMap((event) =>
            this.cartService.isStable().pipe(filter(Boolean), mapTo(event))
        ),
        // Merge the state snapshot of the cart with the data from the event:
        withLatestFrom(this.cartService.getActive()),
        map(([event, cart]) => ({ ...event, cart }))
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    人工智能基础_机器学习006_有监督机器学习_正规方程的公式推导_最小二乘法_凸函数的判定---人工智能工作笔记0046
    Github访问加速
    基于Laravel封装一个强大的请求响应日志记录中间件
    030:vue中使用md5进行数据加密示例
    【Codeforces】 CF1762E Tree Sum
    Vue监测数据的原理(对象、数组)、Vue.set()、vm.$set()
    4.RabbitMQ 消息确认机制
    一本通1047;判断能否被3,5,7整除
    Harmony 复杂图形自绘制
    【C语言】数据结构——无头单链表实例探究
  • 原文地址:https://blog.csdn.net/i042416/article/details/126850317