J'ai une directive avec un isolat-portée (de sorte que je peux réutiliser la directive dans d'autres lieux), et quand j'utilise cette directive avec une ng-repeat
, cela ne fonctionne pas.
J'ai lu toute la documentation et stackoverflow réponses sur ce sujet et de comprendre les enjeux. Je crois que j'ai évité tous les pièges.
Donc, je comprends que mon code ne fonctionne pas parce que le champ créé par l' ng-repeat
directive. Mon propre directive crée un isolat-champ d'application et fait dans les deux sens de la liaison de données à un objet de la portée parent. Mon directive assigne un nouvel objet-valeur de cette variable liée et cela fonctionne parfaitement lors de mon directive est utilisée sans ng-repeat
(la variable parent est correctement mis à jour). Cependant, avec ng-repeat
, la cession crée une nouvelle variable dans l' ng-repeat
de la portée et de la variable parent ne voit pas le changement. Tout cela est prévu sur la base de ce que j'ai lu.
J'ai aussi lu que lorsqu'il y a plusieurs directives sur un élément donné, qu'un seul champ est créé. Et qu'un priority
peut être définie dans chaque directive pour définir l'ordre dans lequel les directives sont appliquées; les directives sont classées par ordre de priorité, puis leur compiler les fonctions sont appelés (de Recherche pour le mot priorité à http://docs.angularjs.org/guide/directive).
Alors j'espérais que je pourrais utiliser en priorité pour faire en sorte que mon directive s'exécute en premier et finit par créer un isolat-champ, et quand ng-repeat
s'exécute, il ré-utilise l'isolat-champ d'application au lieu de la création d'un champ qui fait hérite de la portée parent. L' ng-repeat
documentation indique que celle-ci s'exécute à un niveau de priorité 1000
. Il n'est pas clair si 1
est un niveau de priorité plus élevé ou un faible niveau de priorité. Lorsque j'ai utilisé le niveau de priorité 1
dans mon directive, il n'est pas de faire une différence, alors j'ai essayé 2000
. Mais cela ne fait qu'aggraver les choses: mon liaisons bidirectionnelles deviennent undefined
et mon directive ne pas afficher quoi que ce soit.
J'ai créé un violon pour montrer mon problème. J'ai commenté l' priority
paramètre dans mon directive. J'ai une liste de nom des objets et une directive appelée name-row
qui montre les champs prénom et nom dans le nom de l'objet. Quand un nom affiché est cliqué, je le veux pour définir un selected
variable dans le champ d'application principal. Le tableau de noms, l' selected
variable sont passés à l' name-row
directive à l'aide de deux voies de liaison de données.
Je sais comment obtenir que cela fonctionne par appel à des fonctions dans le champ d'application principal. Je sais aussi que si selected
est à l'intérieur d'un autre objet, et je la lie à l'objet extérieur, les choses allaient tourner. Mais je ne suis pas intéressé par ces solutions à l'heure actuelle.
Au lieu de cela, les questions que j'ai sont:
- Comment puis-je empêcher
ng-repeat
de la création d'un champ qui fait hérite de la portée parent, et, au lieu de l'avoir utiliser mon directive isoler le-champ? - Pourquoi le niveau de priorité
2000
dans mon directive ne fonctionne pas? - À l'aide de Batarang, est-il possible de savoir quel type de champ d'application est en cours d'utilisation?
Je vous remercie.
-deepak