Шесть ключевых директив Angular

Вы можете добавлять директивы в HTML вашего Angular‑проекта. Одни управляют структурой разметки, другие — атрибутами и поведением элементов. Ниже — практическое руководство с примерами и дополнительными материалами для быстрой интеграции в реальные проекты.
Что такое директивы Angular
Директивы Angular позволяют управлять видимостью, повторением и внешним видом HTML‑блоков, а также связывать данные между шаблоном и кодом. Условно директивы делятся на два типа:
- структурные (изменяют структуру DOM): ngIf, ngFor, ngSwitch;
- атрибутные (изменяют свойства/стили/связывание): ngClass, ngStyle, ngModel.
| Директива | Описание |
|---|---|
| *ngIf | Показывает или скрывает фрагмент разметки в зависимости от условия. Применимо для ошибок, заглушек, условных блоков. |
| *ngFor | Повторяет блок для каждого элемента коллекции. Удобно для списков, карточек, меню. |
| *ngClass | Условно применяет CSS‑класс к элементу (на основе выражения). |
| *ngStyle | Применяет инлайн‑стили на основе выражения (одноразовое или динамическое). |
| *ngModel | Двустороннее связывание значения между шаблоном и компонентом (формы, поля ввода). |
| *ngSwitch | Реализует множественный выбор отображаемых блоков по значению (аналог switch). |
Важно: директивы с префиксом * являются структурными (они меняют DOM), а без * — атрибутные (меняют свойства элемента).
Как использовать ngIf
ngIf показывает элемент, если условие истинно. Часто применяется для сообщений об ошибках, заглушек и ленивой загрузки.
- Пример переменных в TypeScript (component.ts):
noPlaylists: boolean = false;
playlists: any[] = [];
constructor() { }
ngOnInit(): void {
if (this.playlists.length === 0) {
this.noPlaylists = true;
}
}- Условный блок в шаблоне (component.html):
Плейлисты не найдены.

- Добавление альтернативы через шаблон
ng-template:
Плейлисты не найдены.
Плейлисты найдены.
Совет: избегайте логики в шаблоне (сложных цепочек вызовов). Выносите вычисления в геттеры или методы компонента для тестируемости.
Как использовать ngFor
ngFor повторяет блок для каждого элемента коллекции. Это стандарт для списков.
- Пример массива в компоненте:
playlists: any[] = [
{ name: 'Rock', numberOfSongs: 5 },
{ name: 'Contemporary', numberOfSongs: 9 },
{ name: 'Popular', numberOfSongs: 14 },
{ name: 'Acoustic', numberOfSongs: 3 },
{ name: 'Wedding Songs', numberOfSongs: 25 },
{ name: 'Metal', numberOfSongs: 0 },
];- Шаблон с ngFor (component.html):
Плейлисты найдены.
{{ playlist.name }}
{{ playlist.numberOfSongs }} песен
Пояснение: внутри *ngFor локальная переменная playlist ссылается на текущий объект. Можно также получить index, first, last, even, odd.

Как использовать ngClass
ngClass позволяет условно назначать CSS‑классы.
- Пример CSS:
.songs {
background-color: #F7F5F2;
}
.noSongs {
background-color: #FFA8A8;
}- Использование внутри ngFor:
0 ? 'songs' : 'noSongs'">
{{ playlist.name }}
{{ playlist.numberOfSongs }} песен
Если numberOfSongs > 0 — применится класс songs (серый фон), иначе — noSongs (красный фон).

Как использовать ngStyle
ngStyle даёт гибкий контроль инлайн‑стилей, когда нужно динамически менять несколько CSS‑свойств.
0 ? '#F7F5F2' : '#FFA8A8' }">
{{ playlist.name }}
{{ playlist.numberOfSongs }} песен
Для нескольких стилей используйте объект с несколькими парами ключ‑значение:
[ngStyle]="{
'background-color': playlist.numberOfSongs > 0 ? '#F7F5F2' : '#FFA8A8',
'color': playlist.numberOfSongs > 0 ? 'black' : 'darkblue'
}"Важно: используйте ngStyle для динамических значений, но предпочтительнее поддерживать стили через классы (ngClass) для упрощения тестирования и переиспользования.
Как использовать ngModel
ngModel реализует двустороннее связывание (two‑way binding) значений формы между компонентом и шаблоном.
- Включите FormsModule в app.module.ts:
import { FormsModule } from '@angular/forms';
@NgModule({
imports: [
...,
FormsModule
]
})- Переменные в компоненте:
renamingPlaylists: boolean = false;
public playlists: any[] = [
...
];- Кнопки переключения режима переименования и поле ввода в шаблоне:
{{ playlist.name }}
{{ playlist.numberOfSongs }} песен
При изменении значения в input поле playlist.name автоматически обновит компонент, и наоборот.

Как использовать ngSwitch
ngSwitch позволяет показывать разные блоки в зависимости от значения (подходит для рейтингов, статусов, типов).
- Добавим свойство rating к объектам:
public playlists: any[] = [
{ name: 'Rock', numberOfSongs: 5, rating: 5 },
{ name: 'Contemporary', numberOfSongs: 9, rating: 1 },
{ name: 'Popular', numberOfSongs: 14, rating: 5 },
{ name: 'Acoustic', numberOfSongs: 3, rating: 4 },
{ name: 'Wedding Songs', numberOfSongs: 25, rating: 5 },
{ name: 'Metal', numberOfSongs: 0, rating: 0 },
];- Пример шаблона с ngSwitch:
{{ playlist.name }}
{{ playlist.numberOfSongs }} песен
★
★★
★★★
★★★★
★★★★★
Нет рейтинга

Сравнение директив — краткая матрица
| Задача | ngIf | ngFor | ngClass | ngStyle | ngModel | ngSwitch |
|---|---|---|---|---|---|---|
| Условно показать блок | да | нет | частично | частично | нет | да (по значению) |
| Повторение элементов | нет | да | нет | нет | нет | нет |
| Динамическая стилизация | нет | нет | да | да | нет | нет |
| Двустороннее связывание ввода | нет | нет | нет | нет | да | нет |
Когда каждая директива не подходит (контрпримеры)
- ngIf: не подходит, если нужно показывать/скрывать элементы без разрушения и восстановления состояния компонента; в таких случаях лучше использовать скрытие через CSS (
[hidden]/visibility) или управление через классы. - ngFor: не подходит для очень больших наборов без виртуализации (используйте CDK virtual scroll для тысяч элементов).
- ngClass/ngStyle: не подходят, если стили зависят от множества условий — лучше вычислять класс в компоненте или использовать CSS-классы с модификаторами.
- ngModel: не подходит для сложных форм — используйте ReactiveForms для сложной валидации и тестирования.
- ngSwitch: не подходит, если число кейсов динамично и меняется — генерируйте шаблоны программно или применяйте карту значений в компоненте.
Методология выбора директивы — мини‑гайд
- Определите цель: показать/скрыть, повторить, изменить стиль или синхронизировать ввод.
- Если повторять набор — ngFor. Если условная отрисовка — ngIf. Если простая визуальная вариация — ngClass/ngStyle.
- Для форм и двусторонней связи — ngModel (простые случаи) или ReactiveForms (сложные валидации).
- Если элементы должны сохранять состояние при скрытии — избегайте уничтожения компонента через ngIf, используйте CSS или
hidden.
Чек‑лист для разработчика перед сдачей фичи
- Нет тяжёлой логики в шаблоне.
- Используются trackBy в ngFor для массивов с динамическим обновлением.
- Для больших списков применена виртуализация.
- Для форм, требующих валидации, используется ReactiveForms.
- Стили вынесены в CSS/SCSS, а не в длинные ngStyle‑объекты без причины.
- Тексты в шаблоне локализованы (i18n) при необходимости.
Критерии приёмки (acceptance)
- ngIf корректно показывает альтернативный шаблон через
else. - ngFor корректно рендерит элементы и использует
trackByпри изменениях коллекции. - ngClass/ngStyle применяют нужные стили при разных значениях полей.
- ngModel синхронизирует поле ввода и значение в компоненте в обоих направлениях.
- ngSwitch отображает правильный кейс для каждой записи.
Тест‑кейсы для автоматизированного тестирования
- ngIf: при пустом массиве playlists компонент должен показывать сообщение «Плейлисты не найдены», при непустом — скрывать.
- ngFor + trackBy: при вставке элемента в начало списка рендерятся только необходимые элементы (проверка DOM по ключам).
- ngClass: элемент с numberOfSongs = 0 должен содержать класс
noSongs. - ngModel: изменение значения в input должно изменить поле объекта playlist и отразиться в другом месте шаблона.
- ngSwitch: рейтинг 4 должен отобразить 4 звезды.
Роли и задачи: что должен сделать кто
- Разработчик: написать компонент, вынести стили, добавить trackBy в ngFor, покрыть тестами.
- Ревьюер: проверить простоту выражений в шаблоне, отсутствие побочных эффектов и соответствие критериям приёмки.
- QA: прогнать тест‑кейсы, проверить поведение при граничных данных (пустые массивы, null, undefined).
Глоссарий — одно предложение на термин
- Директива: специальная атрибуция в шаблоне, которая меняет поведение или внешний вид DOM‑элемента.
- Структурная директива: директива, изменяющая структуру DOM (вставляет/удаляет элементы).
- Атрибутная директива: директива, изменяющая свойства, классы или стили существующего элемента.
- Two‑way binding: двусторонняя синхронизация значения между шаблоном и компонентом.
Факты и рекомендации
- В Angular чаще всего используются 6 директив, описанных выше.
- Для производительности используйте
trackByв ngFor и избегайте частых перерасчётов в шаблоне. - Для больших форм и бизнес‑логики предпочитайте ReactiveForms.
Important: при переводе интерфейсных строк (тексты кнопок, сообщения) учитывайте локализацию и возможность интеграции с i18n.
Краткое резюме
Вы изучили базовый набор директив Angular и получили практические примеры их применения: ngIf для условий, ngFor для списков, ngClass/ngStyle для стилизации, ngModel для простого связывания форм и ngSwitch для множественного выбора. Применяйте методологию выбора, используйте чек‑листы и тест‑кейсы для контроля качества.
Summary:
- Используйте структурные директивы для управления DOM; атрибутные — для стилей и связывания.
- Предпочитайте классы (ngClass) инлайн‑стилям (ngStyle) где возможно.
- Для сложных форм переходите на ReactiveForms.
Если нужно, могу подготовить готовый репозиторий‑шаблон с этими примерами и тестами для вашего проекта.
Похожие материалы
Изменение размера фото в Adobe Premiere Pro
Nearby Sharing в Windows 10: быстрый обмен файлами
Медиа‑источник не отображается в OBS — как исправить
Поменять папку для скриншотов в One UI 5.1
Собрать мощный дешёвый ПК из серверных комплектующих