Как получить данные из пользовательского компонента, созданного на стороне @hybris в Spartacus

Я создал пользовательский компонент CustomPromotionComponent, расширив сторону SimpleCMSComponent @hybris. Его отрендерили на сайте Спартака.

0: {slotId: "Section2A-Promotion",…}
components: {component: [{uid: "CustomPromotionComponent",…}]}
component: [{uid: "CustomPromotionComponent",…}]
0: {uid: "CustomPromotionComponent",…}
container: "false"
modifiedtime: "2020-07-25T17:58:35.279+05:30"
name: "Custom Promotion Component"
typeCode: "CustomPromotionComponent"
uid: "CustomPromotionComponent"
uuid: "eyJpdGVtSWQiOiJDdXN0b21Qcm9tb3Rpb25Db21wb25lbnQiLCJjYXRhbG9nSWQiOiJlbGVjdHJvbmljcy1zcGFDb250ZW50Q2F0YWxvZyIsImNhdGFsb2dWZXJzaW9uIjoiT25saW5lIn0="

как показано выше.

Как я могу получить эти данные из angular? Я также создал такой же компонент @angular side, но он не работает. Я добавил свой компонент в файл .ts, как показано вместе с этим, я также добавил свой компонент в custom-page.module.ts.

import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';
import { CmsComponentData } from '@spartacus/storefront';
import { CmsService} from '@spartacus/core';
import { CMSCustomPromotionComponent } from '../cms.custom-promotion-component';


@Component({
  selector: 'app-custom-promotion',
  templateUrl: './custom-promotion.component.html',
  styleUrls: ['./custom-promotion.component.scss'],
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class CustomPromotionComponent implements OnInit {

  componentData$: Observable<CMSCustomPromotionComponent> = this.componentData.data$;

  constructor( protected componentData: CmsComponentData<CMSCustomPromotionComponent>, 
    protected cmsService: CmsService) {}

  ngOnInit(): void {
    console.log(this.componentData$);
  }

}

html часть:

<p *ngIf="(componentData$ | async) as data" [innerHTML]="data.name"></p>
ConfigModule.withConfig({
      cmsComponents: {
        CustomPromotionComponent: {
          component: CustomPromotionComponent,
        }
      },
    } as CmsConfig)

создал cmscustomcomponent, расширив cmscomponent.

import { CmsComponent } from '@spartacus/core';

export interface CMSCustomPromotionComponent extends CmsComponent {
    container?: string;
}

При рендеринге на витрине я получаю ошибку ниже:

core.js:6228 ERROR Error: Uncaught (in promise): NullInjectorError: StaticInjectorError(AppModule)[CustomPromotionComponent -> CmsComponentData]: 
  StaticInjectorError(Platform: core)[CustomPromotionComponent -> CmsComponentData]: 
    NullInjectorError: No provider for CmsComponentData!
NullInjectorError: StaticInjectorError(AppModule)[CustomPromotionComponent -> CmsComponentData]: 
  StaticInjectorError(Platform: core)[CustomPromotionComponent -> CmsComponentData]: 
    NullInjectorError: No provider for CmsComponentData!

person Naman    schedule 08.08.2020    source источник


Ответы (2)


Вы можете использовать https://github.com/SAP/spartacus/blob/develop/projects/storefrontlib/src/cms-components/content/paragraph/ в качестве справочного материала.

Это интересная часть:

constructor(public component: CmsComponentData<CmsParagraphComponent>) {}
person Cayacdev    schedule 12.08.2020
comment
Я обновил свой фрагмент кода, но теперь я получаю сообщение об ошибке на витрине. Пожалуйста, обратитесь к описанию ошибки, обновленной в объяснении. - person Naman; 12.08.2020
comment
Ваши фрагменты кода мне кажутся правильными. Может быть, попробуйте перезапустить процесс пряжи. - person Cayacdev; 12.08.2020
comment
Я уже пробовал перезапустить пряжу, получив ту же ошибку. - person Naman; 12.08.2020
comment
stackoverflow.com/users/2890959/tobi-or-not-tobi не могли бы вы помочь? - person Naman; 18.08.2020

Можете ли вы попробовать указать CmsComponentData в конструкторе, проверьте, решает ли он проблему или нет

person Richa    schedule 19.08.2020
comment
Попробуйте добавить в свой ответ более подробную информацию, например. укажите первопричину проблемы и определенное решение проблемы. В противном случае рассмотрите возможность добавления комментария к вопросу вместо того, чтобы добавлять ответ. - person Akash; 19.08.2020
comment
CmsComponentData уже присутствует в конструкторе, также, если вы говорите что-то еще, не могли бы вы объяснить немного больше. - person Naman; 20.08.2020