Sto cercando di capire meglio le sfumature dell'utilizzo del servizio $ timeout in Angular come una sorta di metodo "safe $ apply". Fondamentalmente in scenari in cui un pezzo di codice può essere eseguito in risposta a un evento angolare oa un evento non angolare come jQuery o qualche evento DOM standard.
mi pare di capire le cose:. Codice
- Wrapping a $ portata $ applicare funziona bene per scenari in cui si non sono già in un ciclo digerire (aka eventi jQuery.), Ma genererà un errore se un digest è in corso codice
- Wrapping in un $ timeout() con nessun parametro di ritardo funziona se già in un ciclo digest o no
Guardando il codice sorgente angolare, sembra $ timeout effettua una chiamata a $ rootScope. $ apply().
- Perché il timeout di $() non genera un errore se è già in corso un ciclo di digest?
- È consigliabile utilizzare $ scope. $ Apply() quando si è sicuri che un digest non sarà già in corso e $ timeout() quando è necessario che sia sicuro in entrambi i casi?
- $ timeout() è davvero accettabile come "applicazione sicura" o ci sono trucchi?
Grazie per qualsiasi intuizione.
Nel mio progetto, ho uno scenario in cui Ho bisogno di aumentare $ scope. $ digest() per catturare gli eventi accaduti fuori dalla vista di Angular. È scaduto il n orm per safeApply o safeDigest o questo è stato risolto in modo intelligente all'interno del framework? – TrueBlue
Perché hai dovuto fare affidamento su '$ timeout' invece di' $ apply'? Se non puoi condividere il codice, potresti almeno discutere la ragione di base? – trysis