Проверяет знание способов обмена данными между независимыми Angular-компонентами, что важно для архитектуры приложения.
В Angular компоненты часто должны обмениваться данными, особенно когда они находятся на одном уровне и не имеют прямого родительско-дочернего отношения. Прямая передача через @Input и @Output возможна только через общего родителя, что усложняет архитектуру. Поэтому используются альтернативные подходы, основанные на сервисах и реактивном программировании.
// data.service.ts
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';
@Injectable({ providedIn: 'root' })
export class DataService {
private dataSubject = new Subject<string>();
data$ = this.dataSubject.asObservable();
sendData(data: string) {
this.dataSubject.next(data);
}
}
// component-a.ts
send() {
this.dataService.sendData('Hello from A');
}
// component-b.ts
ngOnInit() {
this.dataService.data$.subscribe(data => console.log(data));
}Здесь сервис объявлен как синглтон (providedIn: 'root'), поэтому оба компонента получают один и тот же экземпляр. Компонент A вызывает sendData, а компонент B подписан на поток и получает обновления.
Для простых случаев достаточно общего сервиса с Subject. Если приложение большое и требует предсказуемого управления состоянием, лучше использовать NgRx. Передача через родителя оправдана, если компоненты уже находятся в одном контейнере и связь не должна быть глобальной.
Общий сервис с RxJS — это гибкий и простой способ для обмена данными между одноуровневыми компонентами, который легко масштабируется. Для сложных приложений стоит рассмотреть централизованное хранилище, но для большинства задач сервис достаточен.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию