EDIT: Complètement et totalement changer ma réponse et le marquage ce "Wiki de la Communauté" (ce qui signifie pas de points pour moi) que j'ai été totalement incorrect lorsque j'ai répondu à cette
@Jonas l'a souligné ci-dessous, voici un très bon article sur l'option de compilation des directives et de l'aide de la fonction transclusion
L'idée de base est la compilation de la fonction doit retourner une fonction de liaison. Vous pouvez utiliser la transclusion fonction à l'intérieur de la fonction de liaison de prendre un clone de la transcluded élément du DOM, le compiler, et l'insérer là où elle doit être insérée.
Ici est un meilleur exemple que j'ai sorti de mon cul sur Plunker
L'idée de la compilation de la fonction est qu'il vous donne une chance de programmation pour modifier les éléments du DOM basée sur les attributs est écoulé AVANT que la fonction de liaison est créé et appelé.
// a silly directive to repeat the items of a dictionary object.
app.directive('keyValueRepeat', function ($compile){
return {
transclude: true,
scope: {
data: '=',
showDebug: '@'
},
compile: function(elem, attrs, transclude) {
if(attrs.showDebug) {
elem.append('<div class="debug">DEBUG ENABLED {{showDebug}}</div>');
}
return function(scope, lElem, lAttrs) {
var items = [];
console.log(lElem);
scope.$watch('data', function(data) {
// remove old values from the tracking array
// (see below)
for(var i = items.length; i-- > 0;) {
items[i].element.remove();
items[i].scope.$destroy();
items.splice(i,1);
}
//add new ones
for(var key in data) {
var val = data[key],
childScope = scope.$new(),
childElement = angular.element('<div></div>');
// for each item in our repeater, we're going to create it's
// own scope and set the key and value properties on it.
childScope.key = key;
childScope.value = val;
// do the transclusion.
transclude(childScope, function(clone, innerScope) {
//clone is a copy of the transcluded DOM element content.
console.log(clone);
// Because we're still inside the compile funciton of the directive,
// we can alter the contents of each output item
// based on an attribute passed.
if(attrs.showDebug) {
clone.prepend('<span class="debug">{{key}}: {{value}}</span>');
}
//append the transcluded element.
childElement.append($compile(clone)(innerScope));
});
// add the objects made to a tracking array.
// so we can remove them later when we need to update.
items.push({
element: childElement,
scope: childScope
});
lElem.append(childElement);
}
});
};
}
};
});