Сценарий
В моем приложении у меня есть несколько вхождений списка элементов. Я могу вставлять новые элементы, нажимая кнопку «плюс» над или под элементом. Я могу удалить элемент, нажав кнопку минус на элементе. Я называю это «список плюс минус» или «добавить список удаления».
Существующее решение
В настоящее время я управляю добавлением и удалением элементов с помощью одного обработчика щелчков делегата для каждого списка, которым управляет контроллер, в нарушение хорошего стиля AngularJS. Я хочу поместить эту логику в пользовательскую директиву. Кроме того, на каждом элементе есть некоторый каркас (например, кнопки плюс и минус), который может быть скрыт внутри шаблона директивы.
Конкретная проблема
При использовании пользовательской директивы в сочетании с ng-repeat, transcludion, определенной областью действия и, вероятно, другими вещами в довольно запутанной системе, которая является пользовательскими директивами Angular, различные вещи, которые интуитивно должны быть доступны, кажутся недоступными. А именно: весь смысл включения состоит в том, чтобы иметь доступ к родительской области внутри директивы.
Если шаблон директивы включает тег ng-transclude внутри ng-repeat, кажется, что включенный контент не сохраняет доступ к внешней области (области приложения, а не области действия директивы). Тем не менее, если это делается без использования директивы (только ng-repeat) или если директива не имеет ng-repeat, доступ работает как положено.
Упрощенный пример
Я сделал демонстрацию проблемы, показывающую все три случая:
http://plnkr.co/edit/np6lTmeTrKioo4kb8SP6?p=preview
Обратите внимание, что зеленые «данные внешней области» не отображаются, когда директива включения содержит ng-repeat. Данные, которые передаются явно (поля), связываются, как и ожидалось, но смысл включения в том, что нам не нужно явно передавать все данные, которые могут быть связаны.
Я использую AngularJS 1.2.0-rc.3.
Предыдущие попытки
Я потратил на это весь день. Я не видел никого с точно моим сценарием: обычно была какая-то тонкая причина, по которой включение не требовалось, или они хотели получить доступ к родительской области внутри самой директивы. Я почти на 100% уверен, что это тонкая проблема, связанная с областью действия, и я недостаточно хорошо знаю Angular, чтобы тонко ее решить. Не имея лучшего направления, я уже перепробовал (наугад) множество комбинаций различных форм директивного объема, включения и замены с предсказуемо небольшими результатами.