Вы должны воспользоваться тегом ng-content
. Это проецирует содержимое тега в сам компонент.
Таким образом, HTML вашего cx-card
компонента может быть.
<div class="cx-card">
<ng-content></ng-content>
</div>
Теперь все, что находится между <cx-card>...</cx-card>
, будет появляются там, где вы поместили тег ng-content
в HTML компонента cx-card
.
То же самое относится и к cx-label
и cx-btn
. Используйте ng-content
в своих HTML для представления Some Text
и Click Me
. Для этого вы также можете воспользоваться свойством @Input
каждого компонента. Примерно так:
В cx-label
компонент TS:
@Input() text: string;
....HTML...
<div class="cx-label">{{text}}</div>
....HTML where it is used....
<cx-lbl [text]="'Some text'"></cx-label>
А в cx-btn
компонент:
@Input() text: string;
...HTML...
<div class="cx-btn">{{text}}</div>
...HTML where it is used...
<cx-btn [text]="'Click Me'"></cx-btn>
Я бы лично сделал @Input
для кнопка и метка и ng-content
для cx-card
.
https://blog.angular-university.io/angular-ng-content/ (настоящее глубокое погружение в ng-content
).