Шаблоны
Используйте синтаксис шаблонов Angular для создания динамических пользовательских интерфейсов.
Шаблоны компонентов — это не просто статический HTML: они могут использовать данные из класса компонента и настраивать обработчики взаимодействия с пользователем.
Отображение динамического текста
В Angular привязка создаёт динамическую связь между шаблоном компонента и его данными. Эта связь гарантирует, что изменения данных компонента автоматически обновляют отображаемый шаблон.
Вы можете создать привязку для отображения динамического текста в шаблоне с помощью двойных фигурных скобок:
@Component({
selector: 'user-profile',
template: `<h1>Profile for {{ userName() }}</h1>`,
})
export class UserProfile {
userName = signal('pro_programmer_123');
}
Когда Angular отрисовывает компонент, вы видите:
<h1>Profile for pro_programmer_123</h1>
Angular автоматически поддерживает привязку в актуальном состоянии при изменении значения сигнала. Развивая
пример выше, если мы обновим значение сигнала userName:
this.userName.set('cool_coder_789');
Отображаемая страница обновится с новым значением:
<h1>Profile for cool_coder_789</h1>
Установка динамических свойств и атрибутов
Angular поддерживает привязку динамических значений к свойствам DOM с помощью квадратных скобок:
@Component({
/*...*/
// Set the `disabled` property of the button based on the value of `isValidUserId`.
template: `<button [disabled]="!isValidUserId()">Save changes</button>`,
})
export class UserProfile {
isValidUserId = signal(false);
}
Вы также можете привязываться к HTML атрибутам, добавляя префикс attr. к имени атрибута:
<!-- Bind the `role` attribute on the `<ul>` element to value of `listRole`. -->
<ul [attr.role]="listRole()"></ul>
Angular автоматически обновляет свойства и атрибуты DOM при изменении привязанного значения.
Обработка взаимодействия с пользователем
Angular позволяет добавлять обработчики событий к элементу в шаблоне с помощью круглых скобок:
@Component({
/*...*/
// Add an 'click' event handler that calls the `cancelSubscription` method.
template: `<button (click)="cancelSubscription()">Cancel subscription</button>`,
})
export class UserProfile {
/* ... */
cancelSubscription() {
/* Your event handling code goes here. */
}
}
Если нужно передать объект события в обработчик, можно использовать встроенную переменную Angular $event внутри вызова функции:
@Component({
/*...*/
// Add an 'click' event handler that calls the `cancelSubscription` method.
template: `<button (click)="cancelSubscription($event)">Cancel subscription</button>`,
})
export class UserProfile {
/* ... */
cancelSubscription(event: Event) {
/* Your event handling code goes here. */
}
}
Управление потоком с @if и @for
Вы можете условно скрывать и показывать части шаблона с помощью блока @if в Angular:
<h1>User profile</h1>
@if (isAdmin()) {
<h2>Admin settings</h2>
<!-- ... -->
}
Блок @if также поддерживает необязательный блок @else:
<h1>User profile</h1>
@if (isAdmin()) {
<h2>Admin settings</h2>
<!-- ... -->
} @else {
<h2>User settings</h2>
<!-- ... -->
}
Вы можете повторять часть шаблона несколько раз с помощью блока @for в Angular:
<h1>User profile</h1>
<ul class="user-badge-list">
@for (badge of badges(); track badge.id) {
<li class="user-badge">{{ badge.name }}</li>
}
</ul>
Angular использует ключевое слово track, показанное в примере выше, для связывания данных с элементами DOM, созданными @for. Подробнее см. Why is track in @for blocks important?.
СОВЕТ: Хотите узнать больше о шаблонах Angular? См. Подробное руководство по шаблонам для полной информации.
Следующий шаг
Теперь, когда в приложении есть динамические данные и шаблоны, пора узнать, как улучшать шаблоны — условно скрывая или показывая элементы, перебирая их и многое другое.