В Angular effects применяются не только в контексте анимаций, но и в управлении потоками данных и состоянием приложения через библиотеку NgRx. Effects позволяют реагировать на действия (actions) и запускать асинхронные операции, не вмешиваясь напрямую в редьюсеры.
Основные принципы работы effects:
Actions сервис из NgRx.Пример эффекта в NgRx:
import { Injectable } from '@angular/core';
import { Actions, createEffect, ofType } from '@ngrx/effects';
import { EMPTY } from 'rxjs';
import { map, mergeMap, catchError } from 'rxjs/operators';
import { DataService } from './data.service';
import * as DataActions from './data.actions';
@Injectable()
export class DataEffects {
loadData$ = createEffect(() =>
this.actions$.pipe(
ofType(DataActions.loadData),
mergeMap(() => this.dataService.getAll()
.pipe(
map(data => DataActions.loadDataSuccess({ data })),
catchError(() => EMPTY)
))
)
);
constructor(
private actions$: Actions,
private dataService: DataService
) {}
}
Здесь эффект loadData$ слушает действие
loadData, запускает асинхронный запрос через сервис и, по
завершении, диспатчит новое действие loadDataSuccess или
игнорирует ошибку через EMPTY.
Эффекты позволяют разгружать компоненты, вынося побочные операции в отдельный слой, что обеспечивает чистоту архитектуры и предсказуемость состояния приложения.
Angular позволяет комбинировать анимации с эффектами для создания сложных пользовательских интерфейсов. Примеры использования:
Такое сочетание timing functions, keyframes и NgRx effects обеспечивает высокую интерактивность, плавность визуальных переходов и строгое управление состоянием приложения без дублирования логики.