SAP Spartacus NullInjectorError: No provider for CmsComponentData

SAP Spartacus NullInjectorError: No provider for 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 是一个抽象 class,因此如果您添加组件而不注入具体 class,您将面临此错误。

我们最近看到一个想要将组件分配给路由的开发人员。这是一个示例,其中 Angular 将尝试从 DI 系统中获取具体的 class,但除非您自己执行此操作,否则 Spartacus 中没有任何内容。

我也遇到了这个错误。当您尝试在 app.component.html 中添加自定义组件时会发生这种情况,这不是必需的,因为这些组件是通过 ConfigModule 映射的。所以把自定义组件的标签去掉app.component.html就可以了