如何正确覆盖默认的斯巴达克斯组件

时间:2020-05-08 11:39:07

标签: spartacus-storefront

在大多数情况下,覆盖现有的Spartacus效果很好。

最小努力量是

B2cStorefrontModule.withConfig({
      cmsComponents: {
        DefaultComponent: {
          component: CustomComponent
        }
      },

大多数情况下,我这样做是因为我需要对html组件进行一些更改。 因此,我将其复制并粘贴到生成的customComponent中。 但大多数情况下,此html包含指令和管道,这些指令和管道需要向我的app.modules中添加其他模块。 有时,这可以很好地工作,但是在其他许多情况下,html不会呈现。

示例:SearchBoxComponent

当尝试使用html时出现浏览器错误:

Error: Template parse errors:
The pipe 'cxHighlight' could not be found ("
      <a
        *ngFor="let suggestion of result.suggestions"
        [innerHTML]="[ERROR ->]suggestion | cxHighlight: searchInput.value"
        [routerLink]="
          {
"): ng:///AppModule/EmvSearchBoxComponent.html@49:21

在其他情况下,我可以通过包含引用此管道“ cxHighlight”的相应模块来解决此问题。在这种情况下为“ SearchBoxModule”。但是还是不好。

如何在我的项目中使用此管道? 也许有解决所有这些输入痛苦的更好方法?

1 个答案:

答案 0 :(得分:0)

您在覆盖Spartacus中的组件的方式上是正确的。就像您注意到某些组件包含管道一样,因此您必须手动将其导入组件模块中。这只是Angular方式。

我们的大多数管道都在多个组件中重复使用,因此我们尝试使它们具有自己的模块以使导入更加容易。

您对cxHighlight是正确的,有一个错误。管道在SearchBoxModule中声明,但未导出,因此几乎无法导入。我将打开一个issue进行修复。