У меня есть директива с областью выделения (так что я могу повторно использовать директиву в других местах), и когда я использую эту директиву с ng-repeat
, она не работает.
Я прочитал всю документацию и ответы Qaru на эту тему и понял проблемы. Я считаю, что избегаю всех обычных ошибок.
Итак, я понимаю, что мой код выходит из строя из-за области, созданной директивой 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
, которая показывает поля первого и последнего имени в объекте name. Когда щелкнуто отображаемое имя, я хочу, чтобы он установил переменную selected
в основной области. Массив имен, переменная selected
передается в директиву name-row
, используя двустороннюю привязку данных.
Я знаю, как заставить это работать, вызывая функции в основной области. Я также знаю, что если selected
находится внутри другого объекта, и я привязываюсь к внешнему объекту, все будет работать. Но на данный момент меня не интересуют эти решения.
Вместо этого у меня есть следующие вопросы:
- Как предотвратить
ng-repeat
от создания области, которая прототипически наследуется от родительской области, а вместо этого использовать мою выделенную область выделения? - Почему уровень приоритета
2000
в моей директиве не работает? - Используя Batarang, можно ли узнать, какой тип области использования используется?