NgForOf
Структурная директива, которая отображает шаблон для каждого элемента коллекции. Директива размещается на элементе, который становится родительским для клонированных шаблонов.
Предупреждение об устаревании
API
class NgForOf<T, U extends NgIterable<T> = NgIterable<T>> implements DoCheck {
constructor(_viewContainer: ViewContainerRef, _template: TemplateRef<NgForOfContext<T, U>>, _differs: IterableDiffers): NgForOf<T, U>;
@Input() set ngForOf(value: (U & NgIterable<T>) | null | undefined);
@Input() get ngForTrackBy(): TrackByFunction<T>;
@Input() set ngForTemplate(value: TemplateRef<NgForOfContext<T, U>>);
static ngTemplateContextGuard<T, U extends NgIterable<T>>(dir: NgForOf<T, U>, ctx: any): ctx is NgForOfContext<T, U>;
}
ngForOf
(U & NgIterable<T>) | null | undefinedЗначение итерируемого выражения, которое можно использовать как входную переменную шаблона.
ngForTrackBy
TrackByFunction<T>Задаёт пользовательскую функцию TrackByFunction для вычисления идентификаторов элементов в итерируемой коллекции.
Если пользовательская функция TrackByFunction не задана, NgForOf будет использовать в качестве ключа идентичность объекта.
NgForOf использует вычисленный ключ, чтобы сопоставить элементы итерируемой коллекции с созданными для них элементами DOM.
Пользовательская функция TrackByFunction полезна для улучшения взаимодействия с пользователем, если элементы итерируемой коллекции, отображаемые с помощью NgForOf, имеют естественный идентификатор (например, пользовательский ID или первичный ключ), а коллекция может обновиться новыми экземплярами объектов, представляющими те же сущности (например, когда данные повторно загружаются с сервера, итерируемая коллекция создаётся и отображается заново, но большая часть данных остаётся прежней).
ngForTrackBy
TrackByFunction<T>ngForTemplate
TemplateRef<NgForOfContext<T, U>>Ссылка на шаблон, который создаётся для каждого элемента итерируемой коллекции.
ngTemplateContextGuard
ctx is NgForOfContext<T, U>Проверяет правильность типа контекста для шаблона, который будет отображён директивой NgForOf.
Наличие этого метода служит сигналом для компилятора проверки типов шаблонов Ivy о том, что структурная директива NgForOf отображает шаблон с определённым типом контекста.
any
ctx is NgForOfContext<T, U>
Описание
Структурная директива, которая отображает шаблон для каждого элемента коллекции. Директива размещается на элементе, который становится родительским для клонированных шаблонов.
Директива ngForOf обычно используется в сокращённой форме *ngFor. В этой форме шаблоном, который отображается на каждой итерации, становится содержимое элемента-якоря с директивой.
В следующем примере показан сокращённый синтаксис с несколькими параметрами внутри элемента <li>.
<li *ngFor="let item of items; index as i; trackBy: trackByFn">...</li>
Сокращённая форма разворачивается в полную форму, в которой селектор ngForOf используется на элементе <ng-template>. Содержимое элемента <ng-template> — это элемент <li>, в котором находилась директива сокращённой формы.
Ниже показан пример сокращённой формы после разворачивания.
<ng-template ngFor let-item [ngForOf]="items" let-i="index" [ngForTrackBy]="trackByFn"> <li>...</li> </ng-template>
Angular автоматически разворачивает сокращённый синтаксис при компиляции шаблона. Контекст каждого встроенного представления логически объединяется с контекстом текущего компонента в соответствии с его лексическим положением.
При использовании сокращённого синтаксиса Angular разрешает размещать на элементе только одну структурную директиву. Чтобы, например, выполнить условную итерацию, разместите *ngIf на элементе-контейнере, оборачивающем элемент *ngFor. Подробнее см. в разделе «Структурные директивы».
Экспортируется из
Примечания по использованию
Локальные переменные
NgForOf предоставляет экспортируемые значения, которым можно присвоить псевдонимы локальных переменных. Например:
<li *ngFor="let user of users; index as i; first as isFirst">
{{i}}/{{users.length}}. {{user}} <span *ngIf="isFirst">default</span>
</li>
Следующим экспортируемым значениям можно присвоить псевдонимы локальных переменных:
-
$implicit: T: значение отдельного элемента итерируемой коллекции (ngForOf). -
ngForOf: NgIterable<T>: значение итерируемого выражения. Полезно, если выражение сложнее, чем обращение к свойству, например при использовании async pipe (userStreams | async). -
index: number: индекс текущего элемента в итерируемой коллекции. -
count: number: длина итерируемой коллекции. -
first: boolean: значение true, если элемент является первым в итерируемой коллекции. -
last: boolean: значение true, если элемент является последним в итерируемой коллекции. -
even: boolean: значение true, если индекс элемента в итерируемой коллекции чётный. -
odd: boolean: значение true, если индекс элемента в итерируемой коллекции нечётный.
Распространение изменений
Когда содержимое итератора меняется, NgForOf вносит соответствующие изменения в DOM:
- При добавлении элемента в DOM добавляется новый экземпляр шаблона.
- При удалении элемента его экземпляр шаблона удаляется из DOM.
- При изменении порядка элементов соответствующие шаблоны также меняют порядок в DOM.
Angular использует идентичность объектов для отслеживания добавления и удаления элементов в итераторе и отражает эти изменения в DOM. Это важно для анимации и любых элементов управления с состоянием, например элементов <input>, которые принимают пользовательский ввод. Добавленные строки можно анимировать при появлении, удалённые — при исчезновении, а неизменившиеся строки сохраняют несохранённое состояние, например пользовательский ввод. Подробнее об анимации см. в разделе «Переходы и триггеры».
Идентификаторы элементов в итераторе могут измениться, даже если сами данные не меняются. Такое может произойти, например, если итератор формируется на основе RPC-запроса к серверу и этот запрос выполняется повторно. Даже если данные не изменились, во втором ответе будут объекты с другими идентификаторами, и Angular придётся удалить весь DOM и создать его заново (как если бы все старые элементы были удалены, а все новые — добавлены).
Чтобы избежать этой затратной операции, можно настроить алгоритм отслеживания по умолчанию, передав параметр trackBy в NgForOf. trackBy принимает функцию с двумя аргументами: index и item. Если задан trackBy, Angular отслеживает изменения по возвращаемому функцией значению.
Super-powered by Google ©2010–2025.
Code licensed under an MIT-style License. Documentation licensed under CC BY 4.0.
https://angular.dev/api/common/NgForOf