2016-04-06 10 views
9

Mam GridComponent wewnątrz PopupComponent.Angular 2 jak wysyłać zdarzenia z komponentu wnukowego na macierzysty?

Chcę wysłać zdarzenie niestandardowe "RowSelected" do komponentu poza komponentem PopupComponent.

Aktualnie wysyłam zdarzenie z GridComponent do PopupComponent i przesyła je na zewnątrz. Jest to bardzo bolesne podejście, ponieważ planuję mieć mnóstwo PopupComponents.

Czy istnieje inny sposób przesyłania zdarzeń?

+4

Skorzystaj z usługi z tematem, zobacz https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service –

+0

Dzięki za odpowiedź! Muszę to przetestować. –

+0

Czy wiesz, że różne ** GridComponent ** (np. Jeden zawiera ludzi, a inne zawierają oferty pracy) będą korzystać z tej samej usługi? To byłoby dla mnie niefortunne. –

Odpowiedz

13

Ilekroć nie masz bezpośredniego związku nadrzędnego →, skorzystaj z usługi (udostępnionej), aby udostępniać dane i/lub wysyłać zdarzenia.

Do wykonania tej usługi użyj przedmiotu lub obserwatora.

Model cookbook ma przykład użycia obiektu do uzyskania dwukierunkowej komunikacji pomiędzy komponentami.

Ten wpis SO, Delegation: EventEmitter or Observable in Angular2, ma przykład użycia obserwowalnego.

+0

Dziękujemy! Wszystko działa dobrze, gdy istnieje rodzic => wnuczka, ale gdy "wnuk" jest sam w kontekście aplikacji, mówi: 'Brak dostawcy usług (wnuczka -> usługa)' –

+1

@ LukaŠilje, to brzmi jak nie masz zdefiniowanej usługi (używając 'provider') wystarczająco wysoko w hierarchii komponentów. Proponuję rzucić okiem na [Hierarchical Injectors doc] (https://angular.io/docs/ts/latest/guide/hierarchical-dependency-injection.html). –

+0

Witaj ponownie. To działało, dopóki nie dokonałem konwersji na wersję (2.0.0). Dowolny pomysł? Wstrzykuję usługę do dostawców AppComponent. –