ng-content
to dyrektywa Angulara, która umożliwia transkluzję treści, czyli wstrzykiwanie zawartości HTML z zewnątrz komponentu do jego szablonu. Umożliwia to tworzenie bardziej elastycznych i reużywalnych komponentów, które mogą przyjmować niestandardową zawartość zdefiniowaną w miejscu użycia komponentu.
Dlaczego ng-content
jest użyteczne?
Dyrektywa ng-content
pozwala tworzyć komponenty działające jako „kontenery” lub „skorupy”, które definiują strukturę i styl, ale pozwalają na dynamiczne definiowanie treści wewnętrznej przez użytkownika komponentu. Dzięki temu można łatwiej tworzyć generyczne UI, takie jak karty, modale, layouty, które potrzebują zewnętrznej zawartości.
Przykład komponentu z ng-content
Załóżmy, że chcemy stworzyć komponent CardComponent
, który jest komponentem i zawiera ng-content
do wstrzykiwania niestandardowej treści.
Definicja Komponentu
// card.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-card',
standalone: true,
imports: [],
templateUrl: './card.component.html',
styleUrl: './card.component.css'
})
export class CardComponent {
}
Szablon HTML
<!-- card.component.html-->
<div class="card">
<div class="card-header">
<ng-content select="[card-header]">
</ng-content>
</div>
<div class="card-body">
<ng-content select="[card-body]"></ng-content>
</div>
<div class="card-footer">
<ng-content select="[card-footer]"></ng-content>
</div>
</div>
Stylowanie Komponentu
/* card.component.css */
.card {
border: 1px solid #ccc;
border-radius: 8px;
padding: 16px;
}
.card-header, .card-body, .card-footer {
margin-bottom: 10px;
}
Użycie Komponentu CardComponent
z niestandardową treścią w app.component.html
<!-- app.component.html-->
<app-card>
<div card-header>
Nagłówek karty
</div>
<div card-body>
Zawartość karty
</div>
<div card-footer>
Stopka karty
</div>
</app-card>
Wyjaśnienie przykładu
- Komponent
CardComponent
definiuje strukturę podstawową karty, która składa się z nagłówka, ciała i stopki. - Dyrektywa
ng-content
z atrybutemselect
pozwala na wstrzykiwanie zawartości do określonych miejsc w komponencie. Atrybutselect
używa selektorów CSS do identyfikacji treści przekazanych do komponentu, które powinny być wstrzyknięte w określone miejsca. - W kodzie HTML, który używa
CardComponent
, możesz umieścić dowolną zawartość wewnątrz tagów<app-card></app-card>
, określając, gdzie ma być wyświetlona przez dodanie odpowiednich atrybutów (card-header
,card-body
,card-footer
).