У меня есть директива с изолированной областью (чтобы я мог повторно использовать директиву в других местах), и когда я использую эту директиву с 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/. Кроме того, тот факт , что директива будет использоваться в нескольких местах, не означает, что мы должны автоматически использовать изолированную область.