Что такое директивы и какие их виды существуют в Angular?
Что такое директивы в Angular?
Директивы — это специальные классы в Angular, которые расширяют поведение HTML-элементов. Они позволяют изменять структуру DOM, добавлять стили или динамически управлять логикой компонента.
Виды директив в Angular
Angular делит директивы на три основные категории:
Тип | Назначение | Примеры |
---|---|---|
Атрибутные | Изменяют внешний вид или поведение элемента | ngClass , ngStyle , customHighlight |
Структурные | Изменяют структуру DOM (добавляют/удаляют элементы) | ngIf , ngFor , ngSwitch |
Пользовательские | Директивы, созданные вами для добавления повторной логики | appTooltip , appValidate |
Атрибутные директивы
Применяются к элементу как атрибуты. Они могут изменять:
- стиль элемента (
ngStyle
) - класс (
ngClass
) - поведение через слушатели событий
Пример: ngClass
<div [ngClass]="{ active: isActive }">Текст</div>
Пример пользовательской атрибутной директивы
@Directive({
selector: '[appHighlight]'
})
export class HighlightDirective {
constructor(el: ElementRef) {
el.nativeElement.style.backgroundColor = 'yellow';
}
}
<p appHighlight>Подсвеченный текст</p>
Структурные директивы
Изменяют структуру DOM: добавляют/удаляют элементы.
Примеры
<div *ngIf="isVisible">Показать</div>
<ul>
<li *ngFor="let item of items">{{ item }}</li>
</ul>
*ngIf
— условный рендеринг.*ngFor
— перебор массива.*ngSwitch
— множественное ветвление.
Создание собственной директивы
import { Directive, ElementRef, HostListener } from '@angular/core';
@Directive({
selector: '[appZoom]'
})
export class ZoomDirective {
constructor(private el: ElementRef) {}
@HostListener('mouseenter') onEnter() {
this.el.nativeElement.style.transform = 'scale(1.1)';
}
@HostListener('mouseleave') onLeave() {
this.el.nativeElement.style.transform = 'scale(1)';
}
}
<img src="..." appZoom />
Отличие от компонентов
Характеристика | Директива | Компонент |
---|---|---|
Селектор | [appDirective] (атрибут) | <app-component> (тег) |
Шаблон | Нет | Есть |
Использование | Как поведение или стиль | Как UI-элемент |
Совет:
Используйте директивы для повторного поведения, не требующего шаблона. Если нужен UI — лучше создать компонент.