如何在Spartacus 4.0结账流程中移除DeliveryAddress guard
Spartacus 4.0 结账环节移除DeliveryAddress Guard 操作方案
你可以通过修改Spartacus内置的结账配置实现需求,无需重写Guard源码,操作步骤如下:
- 第一步:重写
CheckoutConfig配置,移除配送地址步骤依赖
在项目根模块(通常为app.module.ts)或独立的Spartacus配置模块中,修改结账步骤配置,关闭后续步骤对配送地址的依赖,同时可以直接移除配送地址步骤的配置项:
import { NgModule } from '@angular/core'; import { CheckoutConfig } from '@spartacus/checkout/base/root'; import { BrowserModule } from '@angular/platform-browser'; import { AppComponent } from './app.component'; @NgModule({ declarations: [AppComponent], imports: [ BrowserModule, // 你的其他Spartacus模块导入 ], providers: [ { provide: CheckoutConfig, useValue: { checkout: { steps: [ // 已删除原deliveryAddress步骤配置 { id: 'deliveryMode', name: 'checkoutProgress.deliveryMode', routeName: 'checkoutDeliveryMode', type: 'deliveryMode', // 核心配置:关闭当前步骤对配送地址的校验要求 needsDeliveryAddress: false }, { id: 'paymentDetails', name: 'checkoutProgress.payment', routeName: 'checkoutPaymentDetails', type: 'paymentDetails' }, { id: 'reviewOrder', name: 'checkoutProgress.review', routeName: 'checkoutReviewOrder', type: 'reviewOrder' } ] } } as CheckoutConfig } ], bootstrap: [AppComponent] }) export class AppModule { }
- 第二步:(可选,针对完全不需要配送地址的场景,如虚拟商品销售)关闭全局配送地址校验
你可以通过注入配送类型Provider,将默认配送类型设置为自提,从全局层面规避配送地址校验逻辑:
// 新增导入 import { DELIVERY_TYPE_PROVIDER, DeliveryType } from '@spartacus/checkout/base/root'; // 在providers数组中新增以下配置 { provide: DELIVERY_TYPE_PROVIDER, useValue: DeliveryType.PICKUP, multi: true }
- 配置完成后重启开发服务,清除浏览器缓存即可生效,原有的DeliveryAddress Guard不会再触发地址存在性校验。
内容的提问来源于stack exchange,提问作者Horacio Castillejo Peña
相关产品推荐
相关产品推荐

