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






