问题描述
我有一组在CMS中创建的自定义组件。自定义组件扩展了BannerComponent,并具有自己的称为“颜色”的属性。
我已经创建了模型:
import { BannerComponent } from '@spartacus/storefront';
export class TestComponent extends BannerComponent{
color?: string;
}
我正在尝试从Angular组件中获取数据。
constructor(私有componentData:CmsComponentData, 私人cmsService:CmsService){}
在执行此操作时,出现以下错误:
“ TestComponent”类型与“ CmsComponent”类型没有共同的属性。
解决方法
您遇到的错误来自打字稿编译器。在该检查期间,没有任何信息可用来了解您实际上正在使用BannerComponent
接口。请记住,打字稿正在执行静态代码验证。
要使编译器知道预期的接口,您需要告诉它。默认情况下,CmsComponentData
类使用CmsComponent
接口。但是,您可以通过将自定义界面传递到CmsComponentData
:
export interface TestComponent extends CmsBannerComponent{
color?: string;
}
constructor(
private componentData: CmsComponentData<TestComponent>,private cmsService: CmsService
) { }
,
模型类:
import { BannerComponent } from '@spartacus/storefront';
export interface TestComponent extends BannerComponent{
color?: string;
}
组件:
import { Component,OnInit } from '@angular/core';
import { CmsService } from '@spartacus/core';
import { CmsComponentData } from '@spartacus/storefront';
import { TestComponent } from 'src/app/models/service-tile.model';
@Component({
selector: 'app-service-tile',templateUrl: './service-tile.component.html',styleUrls: ['./service-tile.component.scss']
})
export class ServiceTileComponent implements OnInit {
constructor(private componentData: CmsComponentData<TestComponent>,private cmsService: CmsService) { }
ngOnInit(): void {
}
}
杂种的反应:
{
"slotId" : "Section1","slotUuid" : "yyyy","position" : "ServiceTileSection","name" : "Service Tile Section","slotShared" : false,"components" : {
"component" : [ {
"uid" : "TestComponent","uuid" : "xxxx","typeCode" : "ServiceTileBannerComponent","modifiedtime" : "2020-10-07T21:18:28.4+05:30","name" : "Component","container" : "false","external" : "false","color" : "RED","media" : {
"code" : "Tile1.jpg","mime" : "image/png","altText" : "Car Trade In","url" : "/medias/?context=3NGMyZjRkZTU4YTMz"
},"headline" : "Test"
},{
component2
},{
component3
}
]
}
}
这是我在示例中使用的确切类。