2015-09-21 17 views
6

Mam aplikację, która zawiera trzy komponenty. Aplikacja, EditView, okno dialogowe.Angular 2 element potomny odnosi się do komponentu nadrzędnego

Komponenty aplikacji zawierają komponenty EditView, które mogą zawierać wiele innych komponentów EditView i jeden komponent Dialog (jeśli składnik dialogowy jest widoczny na stronie).

Komponent okna dialogowego zawiera składnik aplikacji. Kiedy kładę, że w dialogu składnikiem w ścieżce deklarację:

directives:[Application] 

I'am uzyskiwanie ten błąd:

Nieoczekiwana wartość dyrektywą „niezdefiniowane” na widoku komponentu „dialog”

Czy to możliwe, w ogóle mieć taką strukturę, w której komponent potomny może zawierać komponent z wyższego poziomu w odniesieniu do niektórych warunków?

Po usunięciu składnika aplikacji z okna dialogowego lub zastąpieniu go innymi komponentami działa poprawnie.

Zlaja

+0

To jest dyskusja z Google Kątowymi grupy: https://groups.google.com/forum/#!topic/angular/tDU5sw1vBwc – zlaja

Odpowiedz

3

Umieszczenie go na liście dyrektyw nie będzie działać, ale nadal można mieć dostęp do elementu nadrzędnego poprzez wstrzykuje go w konstruktorze dyrektywy dziecko:

constructor(@Host(Application) application: Application) { 

} 

I składnik rodzic może dostać żywego listę elementów podrzędnych korzystających @Query:

constructor(@Query(EditView) editViews: QueryList<EditView>){ 

} 
+0

Justo do clerify. Chcę mieć nową instancję aplikacji w komponencie Dialog. Aplikacja -> EditView -> Dialog -> Aplikacja (to nowa instancja). – zlaja

+0

Dzięki funkcji forwardRef Zarządzałem komponentem Dialog można zobaczyć składnik aplikacji w dyrektywach, sprawdziłem go w trybie debugowania. Teraz otrzymuję ten błąd: Bezwarunkowy cykl komponentu w aplikacji. Zobacz https://groups.google.com/forum/#!topic/angular/tDU5sw1vBwc. – zlaja

Powiązane problemy