Spartacus产品新增属性:PDP页加动态URL参数及ProductAdapter实现确认
方案有效性说明
你选择实现ProductAdapter的方案是完全符合Spartacus架构设计规范的正确方案,适配层本身就是Spartacus设计用来处理后端API请求构造、参数拼接、响应解析的层级,非常适合你要添加动态URL参数、扩展产品返回字段的需求。
此前扩展ProductService不生效的原因
Spartacus采用分层依赖设计,ProductService属于上层业务门面层,本身不直接发起API请求,最终的请求调用逻辑全部由底层注入的ProductAdapter实现,所以仅重写ProductService方法如果没有处理对依赖分支、或者没有配置正确的注入优先级,就会出现重写方法不触发的问题。
实现自定义ProductAdapter的注意事项
- 不需要从零实现整个
ProductAdapter接口的所有方法,可以直接继承Spartacus默认提供的OccProductAdapter,仅重写你需要修改的load方法即可,减少冗余代码 - 自定义适配器实现完成后,必须在你对应功能模块的
providers数组中配置替换原有适配器,示例配置如下:
@NgModule({ providers: [ { provide: ProductAdapter, useClass: MyProductAdapter } ] }) export class MyProductExtensionModule {}
- 动态URL参数可以直接在重写的
load方法中拼接,需要上下文参数时可以直接在适配器中注入对应的上下文服务(比如站点上下文、用户会话服务等)动态获取值 - 新增的产品返回字段可以直接在适配器的响应解析逻辑中映射到产品模型的对应属性,上层的PDP组件、ProductService不需要做额外修改即可读取到新增属性
可选补充方案
如果你仅需要添加请求参数、不需要修改响应的字段解析逻辑,也可以选择扩展OccProductLoadingStrategy实现参数注入,但实现ProductAdapter是兼容性更强、适用场景更广的标准扩展方式,更推荐你当前的选择。
内容的提问来源于stack exchange,提问作者Ross Rawlins
相关产品推荐
相关产品推荐

