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-repeatdirettiva. 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-repeatnell'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 prioritypuò 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-repeatvenga 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-repeatdocumentazione afferma che tale direttiva viene eseguita a livello di priorità 1000. Non è chiaro se 1sia un livello di priorità più alto o un livello di priorità più basso. Quando ho usato il livello di priorità 1nella mia direttiva, non ha fatto la differenza, quindi ho provato 2000. Ma questo peggiora le cose: le mie associazioni a due vie diventano undefinede la mia direttiva non mostra nulla.
Ho creato un violino per mostrare il mio problema . Ho commentato l' priorityimpostazione nella mia direttiva. Ho un elenco di oggetti nome e una direttiva chiamata name-rowche mostra i campi nome e cognome nell'oggetto nome. Quando si fa clic su un nome visualizzato, voglio che imposti una selectedvariabile nell'ambito principale. L'array di nomi, la selectedvariabile viene passata alla name-rowdirettiva utilizzando l'associazione dati a due vie.
So come farlo funzionare chiamando le funzioni nell'ambito principale. So anche che se si selectedtrova 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-repeatcreazione 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à
2000nella mia direttiva non funziona? - Utilizzando Batarang, è possibile sapere che tipo di ambito è in uso?







scope: trueper 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.