Sto tentando di seguire this SO answer explaining how to render a recursive JSON structure using a directive. Tuttavia, a differenza della risposta fornita, i miei dati sono non noti quando il DOM viene caricato e Angular viene eseguito per la prima volta.Aggiornamento della direttiva JS angolare in caso di modifiche del servizio
Invece, i miei dati vengono recuperati da un campo di input HTML e memorizzati in un servizio angolare (quando l'utente invia il modulo).
Come è possibile aggiornare una direttiva angolare quando i dati del servizio vengono modificati?
Aggiornamento in risposta a rispondere
@musically_ut fornito una risposta eccellente che ha aiutato, ma ha rivelato un problema correlato, impedendo un'implementazione (aggiornato qui).
La direttiva esegue il rendering HTML contenente Angular {{expressions}}
quali dati di accesso memorizzati in $scope
. Poiché la soluzione originale era $watch
quando il servizio aveva i dati pronti. Come posso garantire che i "nuovi" dati vengano aggiunti a $scope
prima del il direttiva rendering?
Una panoramica dell'architettura e flusso è:
ControllerA
-> Ottenere input da utenteControllerA
-> Usa servizio per trasformare i datiControllerB
->$watch
per le modifiche in servizioDirective
->$watch
per cha NGES in servizioControllerB
-> Aggiungi dati$scope
Directive
-> Mostra trasformato i dati (da servizio) utilizzando direttive
Il problema è tra i punti 5 e 6. La direttiva esegue il rendering {{expressions}}
prima che ControllerB abbia aggiunto i dati a $scope
. Anche se questo ha funzionato, sembra troppo complesso e "hacky".
In effetti, per regredire, sto usando $watch
in ControllerB per ascoltare quando i dati trasformati sono pronti in un servizio. Anche questo sembra un po 'eccessivo (il servizio non effettua chiamate asincrone).
Sono nuovo in angolare, e arrivare a tuo post cercando informazioni circa la sorveglianza cambiamenti servizi nelle direttive. Per quanto ne capisco, pb (e in base a ciò che ho letto di recente), non dovresti "aggiungere dati allo scope" nel tuo ** ControllerB **, è meglio che lo riferisca al ** servizio **, e verrà automaticamente segnalato allo scope ** controllerB **. A proposito, sarai in grado di tenere traccia ** delle modifiche ** al servizio ** nella tua ** direttiva ** (intendo facilmente che tracciare lo scope "esterno" ** controllerB **). Ma forse mi sbaglio. –