2015-09-21 7 views
6

Ho un'applicazione che contiene tre componenti. Applicazione, EditView, finestra di dialogo.Componente figlio 2 angolare si riferisce al componente principale

I componenti dell'applicazione contengono componenti EditView che possono contenere molti altri componenti di EditView e un componente di Dialog (se il componente Dialog è visibile su una pagina).

Il componente della finestra di dialogo contiene il componente Applicazione. Quando ho messo che nel componente di dialogo nel percorso dichiarazione:

directives:[Application] 

I'am questo errore:

valore direttiva imprevisto 'undefined' sulla vista del componente di 'dialogo'

E 'possibile avere una tale struttura in cui il componente figlio può contenere componenti dal livello superiore in relazione ad alcune condizioni?

Se si rilascia componente dell'applicazione da Dialog o lo si sostituisce con altri componenti, funziona correttamente.

Zlaja

+0

Questa è la discussione da parte di Google gruppo angolare: https://groups.google.com/forum/#!topic/angular/tDU5sw1vBwc – zlaja

risposta

3

Mettere nella lista direttive non funziona, ma è ancora possibile avere accesso al componente principale per averlo iniettato nel costruttore della direttiva bambino:

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

} 

E la componente genitore può ottenere una lista dal vivo dei componenti figlio utilizzando @Query:

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

} 
+0

Justo a clerify. Voglio avere una nuova istanza dell'applicazione nel componente Dialog. Applicazione -> EditView -> Finestra di dialogo -> Applicazione (questa è una nuova istanza). – zlaja

+0

Con forwardRef che ho gestito, il componente Dialog può vedere il componente Application nelle direttive, l'ho controllato in modalità debug. Ora, sto ricevendo questo errore: ciclo di componenti incondizionato nell'applicazione. Vedi https://groups.google.com/forum/#!topic/angular/tDU5sw1vBwc. – zlaja