Директивы¶
Angular директивы используются для изменения внешнего вида или поведения DOM-элемента. Выделяют три типа директив:
- С собственным шаблоном, или по-другому компоненты (компоненты являются директивами);
- Структурные, которые изменяют структуру DOM-дерева;
- Атрибуты, которые изменяют внешний вид или поведение по умолчанию элемента DOM-дерева.
Компоненты уже были разобраны ранее, поэтому в этой и следующей главах будут рассмотрены только структурные директивы и директивы атрибуты.
Несмотря на существующую классификацию, иногда бывают трудно однозначно определить принадлежность к группе, поскольку одна директива может совмещать в себе функционал сразу двух групп.
По умолчанию в Angular предусмотрен ряд встроенных директив. Рассмотрим самые популярные из них.
К встроенным структурным директивам относятся: *ngIf
, *ngFor
, *ngSwitch
и др. Все Angular директивы этой группы предваряются символом *
.
ngIf¶
*ngIf
добавляет или удаляет элемент из DOM-дерева в зависимости от истинности переданного выражения (true
— добавление, false
— удаление).
1 2 |
|
ngFor¶
*ngFor
используется для визуализации массива данных. Директива применяется к блоку HTML-кода, определяющего, как должны отображаться данные элемента массива. Далее Angular использует этот HTML как шаблон для всех последующих элементов в массиве.
Предположим, имеется следующий массив данных:
1 2 3 4 5 |
|
Отображение списка в шаблоне выглядит так:
1 2 3 4 5 |
|
В результате будет сгенерирован следующий HTML-код:
1 2 3 4 5 |
|
Angular *ngFor
поддерживает ряд шаблонных переменных:
index
— хранит порядковый номер текущего элемента массива, отсчет начинается с0
;first
—true
, если элемент первый в массиве;last
—true
, если элемент последний в массиве;even
—true
, если элемент четный;odd
—true
, если элемент нечетный.count
— хранит общее количество элементов массива
При изменении массива Angular перерисовывает дерево DOM полностью. Но если использовать функцию trackBy, то Angular будет понимать, какой элемент изменился, а затем внесёт изменения в DOM только для этого конкретного элемента.
1 2 3 4 5 6 |
|
Если HTML-шаблон элемента массива состоит из двух DOM-элементов, находящихся на одном уровне иерархии, необходимо использовать элемент <ng-container></ng-container>
, который позволяет группировать элементы. При этом сам он из шаблона будет удален.
1 2 3 4 |
|
ngSwitch¶
ngSwitch
эмулирует работу оператора switch
применительно к шаблонам.
1 |
|
1 2 3 4 5 6 7 |
|
Angular директивы *ngSwitchCase
и *ngSwitchDefault
отображают указанный шаблон в зависимости от значения переданной ngSwitch
переменной или шаблон по умолчанию, если ни один из описанных случаев не соответствует реальному значению.
ngStyle и ngClass¶
К наиболее используемым директивам атрибутам относятся [ngStyle]
и [ngClass]
.
[ngStyle]
принимает объект, в котором ключами служат наименования CSS-свойств, а их значениями — возможные значения соответствующих CSS-свойств.
1 2 3 4 |
|
1 |
|
Объект стилей можно определить прямо в шаблоне, причем можно использовать выражения и условия.
1 2 3 |
|
[ngClass]
также принимает объект, но ключами здесь служат наименования классов, а значениями — выражения типа Boolean
. Если выражение истинно, класс будет добавлен к списку уже имеющихся классов.
В отличие от атрибута [attr.class]
, Angular директива [ngClass]
не заменяет уже установленное значение.
1 |
|
Также директива может принимать массив со списком классов, которые необходимо применить к элементу.
1 |
|