spartacus-storefront - OutletService 是否支持在按钮处理程序中动态添加组件

标签 spartacus-storefront

我使用了 this.outletService.add('BottomHeaderSlot', factory, OutletPosition.BEFORE);在搜索按钮单击处理程序期间,在 BottomHeaderSlot 中添加自定义组件。我打算在标题下添加 searchOverlay 以添加自定义搜索行为。
但是我的自定义组件在调用 outletService.add 后没有显示在标题下。我引用了这个https://sap.github.io/cloud-commerce-spartacus-storefront-docs/outlets/ . outletService是否支持运行时动态添加组件?

以下是我的按钮处理程序

  open(): void {
    const factory = this.componentFactoryResolver.resolveComponentFactory<SearchOverlayComponent>(SearchOverlayComponent);
    this.outletService.add('BottomHeaderSlot',  <any>factory, OutletPosition.BEFORE);
    this.cd.markForCheck();

最佳答案

这是个好问题。目前,我们的商店不支持此功能。

您可以采取的解决方案是以更静态的方式注入(inject)组件(在应用程序初始化时使用 CMS 或 socket ,如此处所示 https://github.com/SAP/cloud-commerce-spartacus-storefront/blob/develop/projects/storefrontlib/src/cms-components/asm/services/asm-enabler.service.ts )?

然后您的组件可以用 <ng-container *ngIf="open$ | async></ng-container> 包裹起来其中 open$是搜索框状态的可观察值。这样,当搜索框打开时,组件只会出现在 dom 中。

通过 socket 动态添加组件的想法是一个很好的想法,我们会牢记在心。我将在 Github 上提出一个问题作为改进。

关于spartacus-storefront - OutletService 是否支持在按钮处理程序中动态添加组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60741918/

相关文章:

angular - 如何在 Spartacus SSR 中记录 http 请求的时间,即使在 SSR 超时后也是如此

spartacus-storefront - 向 Spartacus 添加自定义页面

spartacus-storefront - 如何在 Spartacus 中预取延迟加载功能

spartacus-storefront - 如何添加我的自定义页面解析器而不是 Spartacus 页面解析器?

javascript - webApplicationInjector.js:4 处未捕获错误 : https://127. 0.0.1 :9002 is not allowed to override this storefront.

angular - 如何在斯巴达克斯中抑制静态页面的自定义上下文?

spartacus-storefront - 斯巴达克斯|在导出引用不可用的现有组件中添加一些详细信息的最佳实践

styling - 将 OOTB 样式应用于扩展组件

angular - OccAdapters 和 Services 之间的使用差异是什么?