Сервисы состояния — это основной механизм управления данными и состояниями приложения, обеспечивающий единую точку правды и возможность масштабирования логики компонентов.
Сервис создаётся с помощью декоратора @Injectable и
регистрируется в модуле или через providedIn: 'root' для
глобальной доступности.
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class CounterService {
private counterSubject = new BehaviorSubject<number>(0);
counter$ = this.counterSubject.asObservable();
increment() {
this.counterSubject.next(this.counterSubject.value + 1);
}
decrement() {
this.counterSubject.next(this.counterSubject.value - 1);
}
reset() {
this.counterSubject.next(0);
}
}
Использование BehaviorSubject обеспечивает возможность
подписки на текущее состояние и реактивное обновление компонентов при
изменении данных.
@Component({
selector: 'app-counter',
template: `
<div>Counter: {{ counter$ | async }}</div>
<button (click)="increment()">+</button>
<button (click)="decrement()">-</button>
<button (click)="reset()">Reset</button>
`
})
export class CounterComponent {
counter$ = this.counterService.counter$;
constructor(private counterService: CounterService) {}
increment() {
this.counterService.increment();
}
decrement() {
this.counterService.decrement();
}
reset() {
this.counterService.reset();
}
}
Сервис состояния обеспечивает:
RxJS и
NgRx позволяет управлять сложным состоянием приложения
через поток событий, reducers и селекторы.BehaviorSubject или ReplaySubject позволяет
загружать данные только при необходимости, экономя ресурсы.Сервисы состояния являются фундаментальной частью архитектуры Angular, делая приложения более управляемыми, предсказуемыми и удобными для расширения.