Spartacus中CartOutlets.ITEM_DETAILS如何注入OrderEntry上下文
解答
不需要重写或复制整套购物车层级组件,有两种无侵入方案可以直接获取orderEntry(购物车行项目entry对象),无需修改cart-details、cart-item-list等上游组件。
方案1:通过模板变量接收Outlet默认上下文(推荐,适配Spartacus 3.2及以上版本)
Spartacus从3.2版本开始,已经为CartOutlets.ITEM_DETAILS出口默认注入了上下文,无需手动传入[cxOutletContext]配置,直接在ng-template上声明输入变量即可拿到目标对象:
<ng-template [cxOutlet]="CartOutlets.ITEM_DETAILS" let-entry="entry"> <!-- 此处entry即为需要的orderEntry对象,可直接绑定自定义业务字段 --> <div>自定义业务信息:{{ entry?.yourCustomField }}</div> </ng-template>
若项目使用3.2以下的Spartacus版本,默认上下文不会自动传递,可使用下面的全版本兼容方案。
方案2:注入宿主CartItemComponent实例(全版本通用)
CartOutlets.ITEM_DETAILS出口嵌入在CartItemComponent的视图内部渲染,自定义模板中可以直接通过Angular依赖注入拿到当前行的CartItemComponent实例,实例本身就暴露了entry属性:
<ng-template [cxOutlet]="CartOutlets.ITEM_DETAILS" let-cartItem="comp"> <!-- cartItem为当前行的CartItemComponent实例,直接读取entry属性即可 --> <div>商品编码:{{ cartItem.entry?.product.code }}</div> <div>自定义展示内容:{{ cartItem.entry?.yourCustomBizField }}</div> </ng-template>
- 以上两种都是Spartacus Outlet机制原生支持的扩展方式,不会破坏购物车原生的数量修改、价格计算、优惠券核销等逻辑,没有升级兼容风险。
- 拿到entry对象后,可直接关联获取对应商品、促销等关联数据,不需要额外传递参数。
内容的提问来源于stack exchange,提问作者Krzysztof Platis
相关产品推荐
相关产品推荐

