Angular предоставляет мощный механизм работы с динамическими списками
через анимации состояний элементов при добавлении, удалении и изменении
порядка. Основной инструмент — директива *ngFor в сочетании
с анимациями trigger и query.
Для анимации добавления или удаления элементов используются состояния
void и *:
trigger('listAnimation', [
transition('void => *', [
style({ opacity: 0, transform: 'translateY(-20px)' }),
animate('300ms ease-out', style({ opacity: 1, transform: 'translateY(0)' }))
]),
transition('* => void', [
animate('300ms ease-in', style({ opacity: 0, transform: 'translateY(20px)' }))
])
])
Использование translateY создаёт ощущение выдвижения
элементов вверх или вниз при изменениях.
Angular позволяет анимировать изменения порядка элементов с помощью
query, stagger и
animateChild:
trigger('listReorder', [
transition('* <=> *', [
query(':enter', [
style({ opacity: 0, transform: 'translateY(-15px)' }),
stagger('50ms', animate('300ms ease-out', style({ opacity: 1, transform: 'translateY(0)' })))
], { optional: true }),
query(':leave', [
stagger('50ms', animate('300ms ease-in', style({ opacity: 0, transform: 'translateY(15px)' })))
], { optional: true })
])
])
Для динамических списков часто комбинируются различные эффекты: появление, исчезновение и изменение позиции. Это создаёт ощущение живого интерфейса, где элементы не просто появляются, а «двигаются» естественно.
<div [@listAnimation]>
<div *ngFor="let item of items">
{{ item.name }}
</div>
</div>
В этом примере при добавлении или удалении элементов будет автоматически применяться заданная анимация, создавая плавный визуальный поток списка.
Временные функции и возможности анимации списков в Angular позволяют реализовать интерфейсы с высокой динамикой и отзывчивостью, сохраняя при этом контроль над каждым элементом и переходом.