Что такое директивы

Ответ

Директивы в Angular — это специальные классы, которые добавляют дополнительное поведение к элементам DOM. Они позволяют манипулировать структурой, стилями или поведением элементов.

Типы директив:

  1. Компоненты — директивы с шаблоном (наиболее распространённые).
  2. Структурные — изменяют структуру DOM (например, *ngIf, *ngFor).
  3. Атрибутные — изменяют внешний вид или поведение элемента (например, ngStyle, ngClass).

Пример атрибутной директивы:

@Directive({
  selector: '[appHighlight]'
})
export class HighlightDirective {
  constructor(el: ElementRef) {
    el.nativeElement.style.backgroundColor = 'yellow';
  }
}

Использование:

<p appHighlight>Выделенный текст</p>

Ответ 18+ 🔞

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

Представь, что у тебя есть обычный HTML-элемент, как этот вот <p>. Скучный, серый, нихуя не умеет. А ты хочешь, чтобы он, например, мигал, как ёлка новогодняя, или чтобы по нему кликнули — и он тебе песню спел. Вот для этого и нужны директивы. Это такие надстройки, которые цепляются к элементу и говорят: «Слушай сюда, дружок-пирожок, теперь ты будешь делать вот так и вот эдак».

Какие они бывают, эти директивы? Да их, блядь, три основных вида, как три богатыря, только не все такие заметные.

  1. Компоненты. Это самые главные, самые распиздяйские директивы. Они не просто что-то меняют, они целые куски интерфейса с собой таскают — свой шаблон, свою логику. Фактически, 90% того, что ты пишешь в Angular — это компоненты. Их даже отдельно выделяют, но по сути они подвид директив.

  2. Структурные директивы. Вот эти ребята — настоящие архитекторы, ёпта. Они всю структуру DOM могут перелопатить. Видел *ngIf? Это они. «Если условие true — оставляем элемент, если false — нахуй выбрасываем из DOM, будто его и не было». *ngFor — это тоже они: «Возьми массив и наштампуй из каждого элемента по тегу, вот тебе шаблон». Звёздочка (*) перед именем — это их опознавательный знак, как клеймо на жопе.

  3. Атрибутные директивы. А эти — как стилисты или тренеры по поведению. Сам элемент не трогают, не добавляют и не убирают, но могут его покрасить, заставить реагировать на мышь или ещё какую хуйню делать. Классические примеры — ngStyle и ngClass. Они меняют стили или классы элемента на ходу.

Давай на живом примере, а то нихуя не понятно.

Вот смотри, хочешь ты сделать свою атрибутную директиву, которая будет заливать фон элемента жёлтым, как предупреждение «осторожно, мудак!».

Создаёшь ты файл, например, highlight.directive.ts, и пишешь там вот такой код:

@Directive({
  selector: '[appHighlight]' // Селектор — это как кличка директивы. Будешь её так в HTML вызывать.
})
export class HighlightDirective {
  constructor(private el: ElementRef) { // ElementRef — это ссылка на сам элемент, к которому прицепились.
    // И вот тут, в конструкторе, делаем с ним что хотим.
    this.el.nativeElement.style.backgroundColor = 'yellow';
  }
}

А потом в шаблоне какого-нибудь компонента используешь её, будто обычный атрибут:

<p appHighlight>Этот текст будет на жёлтом фоне, блядь!</p>

Вот и вся магия. Навесил атрибут — и элемент сразу стал другим. Никаких лишних телодвижений. Главное — не забыть директиву в модуль добавить, а то Angular её не увидит и будет материться в консоли.

Короче, директивы — это как суперспособности для твоих HTML-тегов. Хочешь — структуру меняй, хочешь — поведение. Без них в Angular — как без рук, одни компоненты, скукота пиздец.