Синтаксис шаблонов Angular

Шаблоны в 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, должен уверенно работать с этими механизмами для создания высококачественных веб-приложений.