Шаблоны в Angular играют ключевую роль в создании динамических веб-приложений. Они обеспечивают механизм отображения данных, привязки событий и взаимодействия с элементами интерфейса. В Angular шаблоны представляют собой HTML-код, в который внедряются дополнительные конструкции, позволяющие работать с данными и поведением приложения.
Привязка данных является основой взаимодействия шаблона с компонентом. В Angular существует несколько видов привязки данных, каждый из которых решает конкретные задачи.
Привязка данных один к одному (Interpolation)
Интерполяция используется для вставки значений из компонента в HTML-шаблон. Это самый простой способ привязки.
<h1>{{ title }}</h1>
В данном примере значение переменной title компонента
будет вставлено в место, где используется конструкция
{{ }}.
Двусторонняя привязка (Two-way Binding)
Двусторонняя привязка обеспечивает синхронизацию данных между
компонентом и DOM. В Angular она реализована через директиву
ngModel, которая связывает модель с представлением в обе
стороны — от компонента к DOM и от DOM к компоненту.
<input [(ngModel)]="name">
Здесь переменная name будет автоматически обновляться
при изменении значения в поле ввода, и наоборот — любые изменения в
компоненте отразятся в поле ввода.
Привязка атрибутов (Attribute Binding)
В Angular существует возможность динамически изменять атрибуты
элементов HTML с помощью привязки атрибутов. Это позволяет задавать
такие атрибуты, как src, href,
disabled, class, и многие другие.
<img [src]="imageUrl" alt="Image">
В данном примере атрибут src будет привязан к значению
переменной imageUrl компонента.
Привязка классов и стилей (Class & Style Binding)
Использование привязки классов и стилей позволяет динамически управлять внешним видом элементов, основываясь на значениях данных в компоненте.
<div [class.active]="isActive"></div>
<div [style.color]="color"></div>
В первом примере класс active будет применен к элементу,
если переменная isActive имеет значение true.
Во втором — будет динамически изменяться цвет элемента в зависимости от
значения переменной color.
Директивы структурирования изменяют структуру DOM, добавляя или
удаляя элементы. Они представляют собой атрибуты, начинающиеся с
*.
*ngIf
Директива *ngIf условно добавляет или удаляет элемент из
DOM в зависимости от выражения.
<div *ngIf="isVisible">Этот элемент отображается, если isVisible == true</div>
Когда переменная isVisible равна true,
элемент будет отображен, иначе — удален.
*ngFor
Директива *ngFor используется для итерации по коллекции
и создания копий элементов DOM для каждого элемента в коллекции.
<ul>
<li *ngFor="let item of items">{{ item }}</li>
</ul>
В этом примере для каждого элемента массива items будет
создан новый элемент списка <li>.
Привязка событий позволяет обработать события, такие как клики, изменения значения, наведение мыши и другие, в шаблоне Angular.
Привязка событий с использованием скобок
Для привязки событий к методам компонента используется синтаксис с квадратными скобками.
<button (click)="onClick()">Click me</button>
В этом примере метод onClick() будет вызван, когда
пользователь кликнет по кнопке.
Привязка событий с параметрами
Иногда необходимо передать параметры в метод при вызове события. Это можно сделать, добавив параметр в синтаксис привязки события.
<button (click)="onClick($event)">Click me</button>
Переменная $event содержит объект события, который можно
передать в метод.
Пайпы в Angular позволяют преобразовывать данные в шаблоне. Они могут применяться как к данным, так и к выражениям.
Простой пайп
Пайп используется для преобразования данных непосредственно в шаблоне. Например, можно применить пайп для форматирования даты:
<div>{{ today | date }}</div>
В этом примере текущая дата будет отформатирована с использованием
пайпа date.
Пайпы с параметрами
Некоторые пайпы могут принимать параметры для более гибкого преобразования данных.
<div>{{ price | currency: 'USD': true }}</div>
Здесь пайп currency преобразует значение в валюту с
указанным кодом (например, USD), и добавляет знак валюты
перед числом.
Локальные переменные позволяют хранить ссылки на DOM-элементы или
директивы в шаблоне. Они создаются с использованием синтаксиса
#.
Пример использования локальной переменной
<input #inputElement type="text">
<button (click)="onClick(inputElement.value)">Submit</button>
В этом примере переменная inputElement ссылается на
HTML-элемент <input>, и значение этого элемента
передается в метод onClick() при нажатии на
кнопку.
Директивы атрибутов изменяют поведение элементов DOM, например, добавляют или удаляют классы, управляют стилями и так далее.
ngClass
Директива ngClass позволяет динамически изменять классы
элемента.
<div [ngClass]="{'active': isActive, 'inactive': !isActive}"></div>
В зависимости от значения переменной isActive, элемент
будет иметь класс active или
inactive.
ngStyle
Директива ngStyle позволяет динамически изменять стили
элемента.
<div [ngStyle]="{ 'color': color, 'font-size': fontSize + 'px' }"></div>
В этом примере стиль элемента будет изменяться в зависимости от
значений переменных color и fontSize.
Шаблонные выражения позволяют выполнять вычисления прямо в шаблоне. Внутри таких выражений можно использовать операторы, функции, доступные данные компонента и другие элементы.
Пример шаблонного выражения
<h1>{{ 1 + 2 }}</h1>
Это выражение отобразит результат сложения 1 + 2, то
есть 3.
Переменные шаблона могут быть использованы в сочетании с директивами для более сложных взаимодействий с DOM.
Пример использования переменной с
ngIf
<div *ngIf="isVisible as visible">
<p *ngIf="visible">Этот элемент отображается, если isVisible == true</p>
</div>
В данном примере переменная visible внутри директивы
*ngIf будет использоваться для дальнейших условий
отображения элементов.
Синтаксис шаблонов Angular представляет собой мощный инструмент для создания динамичных и интерактивных веб-приложений. Возможности привязки данных, событий, а также использование директив и пайпов делают работу с интерфейсами удобной и гибкой. Опытный разработчик, использующий Angular, должен уверенно работать с этими механизмами для создания высококачественных веб-приложений.