Проблема заключается в том, что к тому времени моя директива обрабатывается в Collect директивы прошла фазы и изменение элемента не вызовет новую компиляцию.
Вам необходимо вручную запустить фазу компиляции после добавления всех других директив, см. plunker.
app.directive("queue", [ '$compile', function($compile) {
var directiveDefinitionObject;
directiveDefinitionObject = {
scope: {},
controller: [
'$scope', function($scope) {
$scope.entries = [{name: 1}, {name: 2}, {name: 3}];
}
],
template: $("#entry").html(),
compile : function(tElement, tAttrs, transclude) {
var compiler;
//All children related directives go here since the template hasn't been
//appended yet in the post link function when we re-compile
tElement.children().attr('ng-repeat', 'entry in entries');
compiler = {
pre : function(scope, iElement, iAttrs, controller) {
},
post : function(scope, iElement, iAttrs, controller) {
if (iElement.attr('can-do-thing-i-define') === undefined) {
var c = tElement.clone();
c.attr('can-do-thing-i-define', '');
$compile(c)(scope);
iElement.replaceWith(c);
}
}
};
return compiler;
}
};
return directiveDefinitionObject;
}]);
вы могли бы обеспечить plunker, было бы легче помочь –
«они не получают повторный запуск на родительский элемент» - я не за тобой здесь. Можете ли вы объяснить немного больше? –
Я собираюсь быть немного педантичным здесь. Это не «подчиненная директива». Это будет «директива для сестер». Я не могу найти причину, по которой вы хотели бы вставить директиву для сестры из другой директивы. Я уверен, что почти во всех случаях, когда вы пытаетесь вставить директиву из другой директивы (а затем компилируете ее), вы сможете сделать это либо в шаблоне, либо вообще не нужно делать это (т. Е. Вы можете реорганизовать это быть лучше). – ganaraj