Включение AngularJS с $compile
У меня есть директива атрибута, которую я использую, чтобы добавить некоторые ngRepeat
логика элементам. Упрощенная версия этой директивы такова:
app.directive(
"repeaty",
[
"$compile",
function repeaty(
$compile
) {
return {
link: function link($scope, $element) {
$element.attr("ng-repeat", "item in [1,2,3,4,5]");
$element.removeAttr("data-repeaty");
$element.removeAttr("repeaty");
$compile($element)($scope);
},
priority: 1000,
restrict: "A",
template: "<ng-transclude/>",
terminal: true,
transclude: true
};
}
]
);
Обратите внимание на использование transclusion в шаблоне. Использование этой директивы как есть приводит к ошибке включения. Ошибка указывает на отсутствие transclude: true
в определении директивы, но это довольно четко там. Если я изменю шаблон на что-то статичное, он будет работать так, как я и ожидал (без желаемого включения). Некоторые поиски привели меня к подозрению, что это как-то связано с тем, как $compile
обрабатывает сферу, но я не получил намного дальше, чем в моем исследовании.
Почему transclusion не ведет себя здесь, и есть ли способ заставить его работать так, как нужно?