Content Projection
About
Это шаблон, в который вставляются данные из другого компонента. Например, у вас есть компонент Card, и в него попадают данные из вашего компонента.
Этот подход позволяет создавать переиспользуемые компоненты.
Реализация Content Projection в Angular:
Single-slot content projection: компонент принимает контент из одного источника;
Multi-slot content projection: компонент принимает контент из нескольких источников;
Conditional content projection: компоненты отображают контент при определенных условиях.
Создается Content Projection через элемент-placeholder <ng-content>
.
Single-slot content projection
Наш Content Projection компонент — <app-some-example>
:
<h2>Single-slot content projection</h2>
<ng-content></ng-content> <!-- Сюда будет вставляться контент -->
Использование Content Projection компонента в другом компоненте:
<app-some-example>
<p>Content projection</p>
</app-some-example>
Multi-slot content projection
Content Projection компонент <app-some-example>
:
Angular поддерживает CSS-селекторы здесь
<h2>Multi-slot content projection</h2>
Default:
<ng-content></ng-content>
Question:
<ng-content select="[question]"></ng-content>
Использование:
<app-some-example>
<p question>
Content projection
</p>
<p>Let's learn about content projection!</p>
</app-some-example>
Conditional content projection
Если контент должен отрисовываться в зависимости от каких-то условий (ngIf
, например), то не рекомендуется использовать <ng-content>
. Для этих целей существует <ng-template>
и <ng-container>
.
Пример смотри здесь: https://angular.io/guide/content-projection
Last updated