作者:mobiledu2502925163 | 来源:互联网 | 2023-02-05 19:22
先查看登录按钮的实现,选择器为cx-registeruser-register.service.ts里,应用了command模式,留神uid里的+,并没有进行任何解决。command最终投递到
先查看登录按钮的实现,选择器为 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;
}
要察看给定类型的事件,能够获取事件类型的流,而后在须要时订阅它。 以下是 CartAddEntryEvent 调用的示例:
constructor(events: EventService){}
/* ... */
const result$ = this.events.get(CartAddEntrySuccessEvent);
result$.subscribe((event) => console.log(event));
如果开发人员须要的数据多于特定事件中蕴含的数据,则能够将此数据与其余流联合起来。 例如,咱们能够从 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 }))
);