Spec-Zone.ru › Angular

ng-container

Специальный элемент, который может содержать структурные директивы, не добавляя новых элементов в DOM.

Описание

Специальный элемент, который может содержать структурные директивы, не добавляя новых элементов в DOM.

<ng-container> позволяет использовать структурные директивы без дополнительных элементов, гарантируя, что в DOM вносятся только изменения, заданные самими директивами.

Это не только немного повышает производительность, поскольку браузеру приходится отображать меньше элементов, но и помогает поддерживать чистоту DOM и стилей.

Например, это позволяет использовать структурные директивы, не нарушая стилизацию, зависящую от точной структуры DOM (например, при использовании flex-контейнеров, отступов, селектора дочерних элементов и т. д.).

Примечания по использованию

С директивами *NgIf

Один из распространённых вариантов использования <ng-container> — вместе со структурной директивой *ngIf. Благодаря специальному элементу можно создавать понятные и удобные в работе шаблоны.

Например, может потребоваться условно отображать несколько элементов, которые не обязательно должны находиться под одним корневым элементом. Это легко сделать, поместив их в такой блок:

<ng-container *ngIf="condition"> … </ng-container>

Также можно добавить оператор else вместе с <ng-template>:

<ng-container *ngIf="condition; else templateA"> … </ng-container>
<ng-template #templateA> … </ng-template>

Сочетание нескольких структурных директив

Нельзя использовать несколько структурных директив на одном элементе; если нужно применить несколько структурных директив, рекомендуется использовать отдельный <ng-container> для каждой из них.

Наиболее распространённый случай — сочетание *ngIf и *ngFor. Например, представим, что у нас есть список элементов, каждый из которых нужно отображать, только если выполнено определённое условие. Может возникнуть соблазн написать что-то вроде:

<ul>
    <li *ngFor="let item of items" *ngIf="item.isValid">
    {{ item.name }}
    </li>
</ul>

Как мы уже сказали, это не сработает. Вместо этого можно просто перенести одну из структурных директив на элемент <ng-container>, который будет содержать другую директиву, например:

<ul>
    <ng-container *ngFor="let item of items">
        <li *ngIf="item.isValid"> {{ item.name }}
        </li>
    </ng-container>
</ul>

Это сработает как задумано и не добавит в DOM ненужных элементов.

Дополнительные сведения см. в разделе одна структурная директива на элемент.

Использование вместе с ngTemplateOutlet

Директиву NgTemplateOutlet можно применять к любому элементу, но чаще всего её применяют к элементам <ng-container>. При их совместном использовании структура HTML и DOM становится понятной и простой для восприятия: дополнительные элементы не нужны, а представления шаблонов создаются в нужных местах.

Например, представим, что у нас есть большой HTML-документ, небольшую часть которого нужно повторить в разных местах. Простое решение — определить <ng-template> с повторяющимся HTML и при необходимости отображать его с помощью <ng-container> вместе с NgTemplateOutlet.

Например:

<ng-container *ngTemplateOutlet="tmpl; context: {$implicit: 'Hello'}" />

<ng-container *ngTemplateOutlet="tmpl; context: {$implicit: 'World'}" />

<ng-template #tmpl let-text>
    <h1>
    {{ text }}
    </h1>
</ng-template>

Дополнительные сведения о NgTemplateOutlet см. на странице документации API NgTemplateOutlets.

Super-powered by Google ©2010–2025.
Code licensed under an MIT-style License. Documentation licensed under CC BY 4.0.
https://angular.dev/api/core/ng-container

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API