Спартак - получение данных из пользовательского компонента CMS - PullRequest
1 голос
/ 03 апреля 2020

В SAP Commerce я подготовил пользовательский компонент CMS. Я положил его в правильный слот. Спартак получит информацию об этом - я вижу, что этот компонент находится в нужном месте на странице. Но как я могу получить некоторые данные из этого компонента. В ответ в данном слоте это выглядит так:

 "components": {
                "component": [
                    {
                        "uid": "NewsletterComponent",
                        "uuid": "eyJpdGVtSWQiOiJOZXdzbGV0dGVyQ29tcG9uZW50IiwiY2F0YWxvZ0lkIjoiZWxlY3Ryb25pY3Mtc3BhQ29udGVudENhdGFsb2ciLCJjYXRhbG9nVmVyc2lvbiI6Ik9ubGluZSJ9",
                        "typeCode": "NewsletterComponent",
                        "modifiedTime": "2020-04-02T21:57:10.236+02:00",
                        "name": "Newsletter Component",
                        "container": "false",
                        "mailPlaceholder": "Your email address",
                        "mailHeaderText": "E-mail Newsletter"
                    }

Как я могу получить эти данные из angular? Я создаю какой-то компонент, но он не работает

import { Component, ChangeDetectionStrategy, OnInit } from '@angular/core';
import { CmsComponentData } from '@spartacus/storefront';
import { CmsComponent, CmsService } from '@spartacus/core'
import { Observable } from 'rxjs';

@Component({
  selector: 'app-newsletter',
  templateUrl: './newsletter.component.html',
  styleUrls: ['./newsletter.component.scss'],
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class NewsletterComponent extends CmsComponentData<CmsComponent> {

  component: Observable<any>;

  constructor(cmsService: CmsService) {
    super();
    this.component = cmsService.getComponentData('NewsletterComponent')
  }


  public getText(): any {
     console.log(this.component)
  }
}

Я регистрирую его в модуле

B2cStorefrontModule.withConfig({
      cmsComponents: {
        NewsletterComponent: {
          component: NewsletterComponent
        }
      },

Могу ли я получить текст mailPlaceholder и mailHeader из ответа сервера?

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Ваш компонент должен принимать данные компонента в конструкторе, см., Например: https://sap.github.io/spartacus/components/ParagraphComponent.html#source

0 голосов
/ 03 апреля 2020

Хорошо, теперь он работает:)

import { Component, ChangeDetectionStrategy, OnInit } from '@angular/core';
import { CmsComponentData } from '@spartacus/storefront';
import { CmsNewsletterComponent } from '../CmsNewsletterComponent';

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

  constructor(public component: CmsComponentData<CmsNewsletterComponent>) {
  }

  cmsComp: CmsNewsletterComponent;

  ngOnInit(): void {
    this.component.data$.subscribe(comp => this.cmsComp = comp);
  }
}

Теперь у меня полный доступ к данным компонента

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...