diff --git a/src/ng/compile.js b/src/ng/compile.js index af7d5e6b319d..d3ade6b82360 100644 --- a/src/ng/compile.js +++ b/src/ng/compile.js @@ -1173,9 +1173,10 @@ function $CompileProvider($provide) { } if (directiveValue = directive.transclude) { - // Special case ngRepeat so that we don't complain about duplicate transclusion, ngRepeat - // knows how to handle this on its own. - if (directiveName !== 'ngRepeat' && directiveName !== 'ngIf') { + // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion. + // This option should only be used by directives that know how to how to safely handle element transclusion, + // where the transcluded nodes are added or replaced after linking. + if (!directive.$$tlb) { assertNoDuplicate('transclusion', transcludeDirective, directive, $compileNode); transcludeDirective = directive; } diff --git a/src/ng/directive/ngIf.js b/src/ng/directive/ngIf.js index 3f56449f0571..35c122ad12d9 100644 --- a/src/ng/directive/ngIf.js +++ b/src/ng/directive/ngIf.js @@ -84,6 +84,7 @@ var ngIfDirective = ['$animate', function($animate) { priority: 600, terminal: true, restrict: 'A', + $$tlb: true, compile: function (element, attr, transclude) { return function ($scope, $element, $attr) { var block = {}, childScope; diff --git a/src/ng/directive/ngRepeat.js b/src/ng/directive/ngRepeat.js index ee0faf23452e..9e5ad2f5a6ad 100644 --- a/src/ng/directive/ngRepeat.js +++ b/src/ng/directive/ngRepeat.js @@ -214,6 +214,7 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { transclude: 'element', priority: 1000, terminal: true, + $$tlb: true, compile: function(element, attr, linker) { return function($scope, $element, $attr){ var expression = $attr.ngRepeat;