Sono abbastanza nuovo per la programmazione Javascript e ho solo toccato AngularJS. Per valutarlo ho deciso di scrivere un'applicazione per appunti semplice. Il modello è davvero semplice, un elenco di note in cui ogni nota ha un'etichetta, un testo e un elenco di tag. Tuttavia mi sono imbattuto in problemi nel passaggio di dati tra ambiti isolati di direttive nidificate.Ordine di chiamata della funzione di collegamento in direttive angularjs nidificate e ripetute
Ho tre direttive, note, note e tagger (che definiscono nuovi elementi con gli stessi nomi). Ognuno di loro utilizza un ambito isolato.
La direttiva notes usa ng-repeat per "rendere" ciascuna delle sue note con l'elemento note.
La direttiva note utilizza l'elemento tagger per "rendere" l'elenco di tag.
La direttiva note definisce l'ambito: {getNote: "&", ...} per passare un'istanza di nota dall'elenco di note al controller di nota/direttiva. La funzione getNote (index) viene chiamata nella funzione di collegamento della direttiva note. Funziona bene!
La direttiva tagger definisce l'ambito: {getTags: "&", ...} per passare un elenco di tag per una determinata nota al controller/direttiva tagger. La funzione getTags viene chiamata nella funzione di collegamento della direttiva tagger. Questo non funziona!
Come ho capito, il problema è che le funzioni di collegamento delle direttive sono chiamate in un ordine incoerente. Debug dell'applicazione mostra che le funzioni di collegamento vengono chiamate nel seguente ordine:
funzionecollegamento nelle note direttiva (aggiungendo la funzione getNote al campo di applicazione note) funzione di collegamento
nella direttiva tagger della prima nota (chiamando getTags dell'area nota genitore) funzione
funzione di collegamento nella prima direttiva nota (aggiungendo i getTags al campo di applicazione) (chiamando getNote nel campo di applicazione note madri) funzione di collegamento
nella direttiva tagger della seconda nota (chiamando getTags dell'area nota genitore funzione)
funzione di collegamento nella seconda direttiva nota (aggiungendo i getTags per il campo di applicazione) (chiamando getNote nel genitore note portata)
Questo non funziona in quanto a # 2 il campo di applicazione della prima nota non ha ancora una funzione getTags.
Un esempio semplicistico può essere trovato in Plunker.
Quindi, la mia domanda si riduce a: cosa determina l'ordine in cui le funzioni di collegamento vengono chiamate in direttive nidificate.
(Ho risolto il problema utilizzando $ watch su getTags nella direttiva tagger ...)
riguarda
[Guida pratica per precollegamento, postlink e metodi di controllo delle direttive angolari] (http://www.undefinednull.com/2014/07/07/practical-guide-to-prelink-postlink-and-controller-methods -delle-angolari-direttive /) è un articolo abbastanza completo su come usare il pre-link/post-link sulle direttive annidate –