SAP Spartacus NullInjectorError:没有CmsComponentData提供者

问题描述

我正在尝试获取自定义组件的组件数据。

private componentData$: Observable<CmsBannerCarouselComponent> = this.componentData.data$.pipe(
    filter(Boolean),tap((d: CmsBannerCarouselComponent) => (console.log("++++++++++++++++++++++++++",d)))
  );

我遇到以下错误

core.js:4197 ERROR NullInjectorError: R3InjectorError(AppModule)[CmsComponentData 
    -> CmsComponentData -> CmsComponentData]: 
    NullInjectorError: No provider for CmsComponentData!

有人可以帮我解决这个问题吗?

解决方法

如果在构造函数中使用CmsComponentData,则必须提供。当CMS组件放置在页面上时,这就是Spartacus所做的。在动态创建组件时,会在该组件的注入器中组成并提供一个数据对象。

CmsComponentData是一个抽象类,因此,如果在不注入具体类的情况下添加组件,则会遇到此错误。

我们最近已经有一个开发人员希望将组件分配给路线,这一点已经得到了解决。这是Angular尝试从DI系统中获取具体类的示例,但除非您自己进行此操作,否则Spartacus中什么都没有。

,

我也遇到过这个错误。当您尝试在 app.component.html 中添加不需要的自定义组件时会发生这种情况,因为这些组件是通过 ConfigModule 映射的。所以从 app.component.html 中删除自定义组件的标签,它会工作。