Quello che sto facendo
Ho un componente che nasconde/mostra utilizzando *ngIf
sulla base di un semplice booleano. Quando il componente diventa visibile, voglio applicare lo stato attivo a un elemento figlio all'interno del suo modello.Come verificare se ngIf ha preso effetto
Il problema
Se I flip il valore booleano della componente mostra correttamente, ma se poi cercare di ottenere un riferimento all'elemento figlio utilizzando this._elRef.nativeElement.querySelector("div#test")
si tratta appena tornato null
. Se aspetto qualche secondo, lo stesso codice restituirà il riferimento all'elemento come mi aspettavo.
speculazione
Sto assumendo che dopo lanciando l'angolare booleano passa attraverso un ciclo di rendering intera per rivelare il componente appena visibile e che questo non ha finito per il momento ho applicare la querySelector()
nella riga successiva.
Quello che mi piacerebbe sapere
Quindi quello che mi chiedo è, come posso essere sicuro che il mio ngIf
ha avuto effetto e gli elementi sono loro nel DOM di essere selezionati?
Esiste un callback per ngIf
o posso forzare la visualizzazione per aggiornare e ottenere una richiamata da quello?
Spero che abbia senso. È stata una lunga giornata (lunga settimana) e sono super stanco.
Grazie a tutti
se aiuta, sto usando Angular2 v2.0.0-beta.15
Quanto robusto è il() '' soluzione setTimeout? Ha risolto il problema usando un ritardo di 0, ma questo sembra un po 'hacky. Il timeout non è completamente separato dal resto del codice e quindi non potrebbero esserci momenti in cui gli aggiornamenti delle visualizzazioni richiedono più tempo per il rendering e il ritardo dovrebbe essere aumentato? – popClingwrap
@popClingwrap, vedere le mie modifiche di risposta. Ho provato ad aggiungere ulteriori dettagli. Usare 'setTimeout()' non è affatto hacky ed è robusto. È il normale metodo JavaScript per rinviare l'esecuzione di alcuni codici. In questo caso, è necessario posticipare la messa a fuoco fino a quando Angular crea l'elemento DOM. Non dovrebbero esserci casi "più lunghi da rendere". Dovrebbe sempre essere un giro del ciclo degli eventi per rendere qualsiasi modifica del DOM apportata dal rilevamento del cambiamento angolare. –
Queste sono alcune cose interessanti che non sapevo prima riguardo al vero coraggio di Javascript. Grazie per i dettagli aggiunti, mi ha davvero aiutato e ho dato un sacco di nuove cose su cui leggere e diventare confuso da :) – popClingwrap