的問題是,由時間MY-指令正在被處理的收集指令相已通過和修改元件將不會觸發一個新的編譯。
您需要在添加所有其他指令後再次手動觸發編譯階段,請參閱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,它可能是更容易幫助 – 2013-03-18 13:55:23
「他們沒有得到一個父元素重新運行」 - 我不是在這裏跟着你。你能多解釋一下嗎? – 2013-03-18 14:02:05
我在這裏會變得有些迂腐。那不是「下屬指令」。這將是一個「兄弟指示」。我不能看到你想從另一個指令插入兄弟指令的原因。我相信,在幾乎所有的情況下,如果你試圖從另一個指令中插入一個指令(然後編譯它),你可以在模板中執行它,或者根本不需要執行它(也就是說,你可以重構這個更好)。 – ganaraj 2013-03-18 17:40:22