Sto cercando di attivare un menu di navigazione laterale, che si trova nella parte superiore del mio modello di app principale utilizzando un pulsante in un componente figlio nidificato. Non riesco a capire come arrivare al componente sidenav nel genitore per dirlo a sidenav.open()
.Access Parent @Component e vars da * Routed * Componente figlio
Conosco @Input e @Output su un componente figlio, ma, a quanto ho capito, per utilizzarlo è necessario disporre di una sorta di tag DOM per il componente figlio a cui collegarli? Ad esempio:
<app>
<sidenav-component #sidenav>...</sidenav-component>
<child [someInput]="some_parent_var" (childOpensNav)="sidenav.open()"></child>
</app>
Tonnellate di articoli su come procedere. Il problema è che io sono routing a questo componente quindi nessun tag <child>
esiste esplicitamente nel codice. Piuttosto il mio codice è simile a questo:
<app>
<sidenav-component #sidenav>...</sidenav-component>
<router-outlet></router-outlet>
</app>
Se ho un componente figlio che viene instradata verso, come faccio a fare un sidenav.open()
o in qualche modo accede a un componente nel genitore del bambino?
Alcune considerazioni: ho fatto qualche ricerca e ho riflettuto su un paio di approcci e non sono sicuro se sono corretti o funzionerebbero ... Un approccio sta usando il servizio Injector e proviamo a passare al genitore, ma questo si sente male:
// child component
constructor(injector: Injector) {
this.something = injector.parent.get(Something);
}
O forse la creazione di un servizio nel genitore, in qualche modo collegato al componente Sidenav e quindi l'iniezione di questo servizio nel bambino ??
Questo è letteralmente esattamente quello che sto cercando di fare. Non posso credere di aver trovato la tua domanda. Grazie. Spero di scorrere verso il basso e ottenere una buona risposta. – krummens