Ho una direttiva con un ambito isolato (in modo da poter riutilizzare la direttiva in altri luoghi) e quando uso questa direttiva con un ng-repeat
, non funziona.
Ho letto tutta la documentazione e le risposte di Stack Overflow su questo argomento e ho compreso i problemi. Credo di aver evitato tutti i soliti trucchi.
Quindi capisco che il mio codice fallisce a causa dell'ambito creato dalla ng-repeat
direttiva. La mia direttiva crea un ambito isolato ed esegue un'associazione dati bidirezionale a un oggetto nell'ambito padre. La mia direttiva assegnerà un nuovo valore oggetto a questa variabile associata e questo funziona perfettamente quando la mia direttiva viene utilizzata senza ng-repeat
(la variabile genitore viene aggiornata correttamente). Tuttavia, con ng-repeat
, l'assegnazione crea una nuova variabile ng-repeat
nell'ambito e la variabile padre non vede la modifica. Tutto questo è come previsto in base a ciò che ho letto.
Ho anche letto che quando ci sono più direttive su un dato elemento, viene creato un solo ambito. E che a priority
può essere impostato in ogni direttiva per definire l'ordine in cui le direttive vengono applicate; le direttive sono ordinate per priorità e quindi vengono chiamate le loro funzioni di compilazione (cercare la parola priorità su http://docs.angularjs.org/guide/directive ).
Quindi speravo di poter usare la priorità per assicurarmi che la mia direttiva ng-repeat
venga eseguita per prima e finisca per creare un ambito isolato e, quando viene eseguito, riutilizza l'ambito isolato invece di creare un ambito che eredita in modo prototipico dall'ambito padre. La ng-repeat
documentazione afferma che tale direttiva viene eseguita a livello di priorità 1000
. Non è chiaro se 1
sia un livello di priorità più alto o un livello di priorità più basso. Quando ho usato il livello di priorità 1
nella mia direttiva, non ha fatto la differenza, quindi ho provato 2000
. Ma questo peggiora le cose: le mie associazioni a due vie diventano undefined
e la mia direttiva non mostra nulla.
Ho creato un violino per mostrare il mio problema . Ho commentato l' priority
impostazione nella mia direttiva. Ho un elenco di oggetti nome e una direttiva chiamata name-row
che mostra i campi nome e cognome nell'oggetto nome. Quando si fa clic su un nome visualizzato, voglio che imposti una selected
variabile nell'ambito principale. L'array di nomi, la selected
variabile viene passata alla name-row
direttiva utilizzando l'associazione dati a due vie.
So come farlo funzionare chiamando le funzioni nell'ambito principale. So anche che se si selected
trova all'interno di un altro oggetto e mi lego all'oggetto esterno, le cose funzionerebbero. Ma al momento non sono interessato a queste soluzioni.
Invece, le domande che ho sono:
- Come posso impedire la
ng-repeat
creazione di un ambito che eredita in modo prototipico dall'ambito padre e invece utilizzare l'ambito isolato della mia direttiva? - Perché il livello di priorità
2000
nella mia direttiva non funziona? - Utilizzando Batarang, è possibile sapere che tipo di ambito è in uso?
scope: true
per la tua direttiva. Vedi anche (se non l'hai già fatto) stackoverflow.com/questions/14914213/… Inoltre, solo perché una direttiva verrà utilizzata in più posizioni non significa che dovremmo usare automaticamente un ambito isolato.