У меня есть директива с изолированной областью (чтобы я мог повторно использовать директиву в других местах), и когда я использую эту директиву с ng-repeat , она не работает.
Я прочитал всю документацию и ответы на Stack Overflow по этой теме и понимаю проблемы. Я считаю, что избежал всех обычных ошибок.
Итак, я понимаю, что мой код не работает из-за области, созданной ng-repeatдирективой. Моя собственная директива создает изолированную область и выполняет двустороннюю привязку данных к объекту в родительской области. Моя директива назначит новое значение объекта этой связанной переменной, и это отлично работает, когда моя директива используется без ng-repeat(родительская переменная обновляется правильно). Однако с ng-repeatприсваиванием создается новая переменная вng-repeat видимости, и родительская переменная не видит изменений. Все это, как и ожидалось, исходя из того, что я прочитал.
Я также читал, что когда есть несколько директив для данного элемента, создается только одна область. И что a priorityможет быть установлен в каждой директиве, чтобы определить порядок, в котором директивы применяются; директивы сортируются по приоритету, а затем вызываются их функции компиляции (ищите приоритет слова на http://docs.angularjs.org/guide/directive ).
Поэтому я надеялся, что смогу использовать приоритет, чтобы убедиться, что моя директива запускается первой и заканчивается созданием изолированной области, а при ng-repeatзапуске она повторно использует изолированную область вместо создания области, которая прототипически наследуется от родительской области. В ng-repeatдокументации указано, что эта директива работает с уровнем приоритета 1000. Неясно, 1является ли уровень приоритета более высоким или более низким. Когда я использовал уровень приоритета 1в своей директиве, это не имело значения, поэтому я попытался 2000. Но это усугубляет ситуацию: мои двусторонние привязки становятся, undefinedа моя директива ничего не отображает.
Я создал скрипку, чтобы показать свою проблему . Я закомментировал priorityнастройку в своей директиве. У меня есть список объектов имени и вызванная директива, name-rowкоторая показывает поля имени и фамилии в объекте имени. При щелчке отображаемого имени я хочу, чтобы оно установило selectedпеременную в основной области. Массив имен, selectedпеременная передаются в name-rowдирективу с помощью двусторонней привязки данных.
Я знаю, как заставить это работать, вызывая функции в основной области. Я также знаю, что если он selectedнаходится внутри другого объекта, и я привязываюсь к внешнему объекту, все будет работать. Но на данный момент меня эти решения не интересуют.
Вместо этого у меня есть следующие вопросы:
- Как мне предотвратить
ng-repeatсоздание области, которая прототипически наследуется от родительской области, и вместо этого использовать мою область действия директивы? - Почему уровень приоритета
2000в моей директиве не работает? - Можно ли с помощью Батаранга узнать, какой тип прицела используется?







scope: trueдля вашей директивы. См. Также (если вы еще этого не сделали) stackoverflow.com/questions/14914213/. Кроме того, тот факт , что директива будет использоваться в нескольких местах, не означает, что мы должны автоматически использовать изолированную область.