Angular - EventEmitter vs Subject

0

Cześć, od jakiegoś czasu uczę się Angulara i mam pewną rozterkę. Podczas komunikacji między komponentami wcześniej wykorzystywałem dekoratory @Input, @Output wraz z EventEmitter<>(), żeby emitować swoje własne eventy, jednak doszedłem teraz do Observables i doczytałem się, że zamiast EventEmittera powinno wykorzystywać się Subject, do którego należy się subskrybować. Czy ktoś mógłby w jasny i prosty sposób wytłumaczyć jaka jest różnica pomiędzy tymi dwoma podejściami oraz kiedy wykorzystywać które? Czy Subject powinno wykorzystywać się wyłącznie, gdy komunikacja pomiędzy komponentami odbywa się przez serwis? Czy jest sens, żeby wykorzystywać serwis do prostej komunikacji np. parent -> child? Z góry dzięki za pomoc!

2

Czy ktoś mógłby w jasny i prosty sposób wytłumaczyć jaka jest różnica pomiędzy tymi dwoma podejściami oraz kiedy wykorzystywać które?

Nie ma jednego prawidlowego use-case

Czy Subject powinno wykorzystywać się wyłącznie, gdy komunikacja pomiędzy komponentami odbywa się przez serwis?

No nie tylko bo w jakims komponencie tez mozesz uzyc tak samo jak i BehaviourSubject wiec odpowiedz brzmi NIE, mozesz uzywac gdziekolwiek nie wydaje mi sie zeby best practices tego "zabranialy", duzo ludzi lubi uzywac async pipe w template ja np nie ale w takich przypadkach w komponentach mialbys pelno BehaviourSubject

Czy jest sens, żeby wykorzystywać serwis do prostej komunikacji np. parent -> child?

Tak szczerze widze w tym sens tylko jesli komunikacja jest naprawde skomplikowana i byc moze mozesz wykorzystac serwis gdzies indziej, w 90% przypadkow jeslio chodzi o parent <-> children to mozna spokojnie uzywac Input/Output i raczej tak to powinno byc zrobione tym bardziej dla komponentow "atomicznych".

Ja np nie lubie rozwiazan typy ngrx/ngxs/akita i mam serwisy ktore trzymaja dane per module/core dla tak zwanych "wide application data/context" a aplikacja to nie jest prosty CRUD i mam sie z tym dobrze

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0