From eed299a31b5a6dd0363133c5f9271bf33d090c94 Mon Sep 17 00:00:00 2001 From: Igor Minar Date: Tue, 20 Aug 2013 16:31:09 -0700 Subject: [PATCH] fix(ngTransclude): clear the translusion point before transcluding when the transluded content is being teleported to the translusion point, we should ensure that the translusion point is empty before appending otherwise we end up with junk before the transcluded content --- src/ng/directive/ngTransclude.js | 5 ++++- test/ng/compileSpec.js | 22 ++++++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/ng/directive/ngTransclude.js b/src/ng/directive/ngTransclude.js index 0b9b919da80a..71d0635aab7f 100644 --- a/src/ng/directive/ngTransclude.js +++ b/src/ng/directive/ngTransclude.js @@ -5,7 +5,9 @@ * @name ng.directive:ngTransclude * * @description - * Insert the transcluded DOM here. + * Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion. + * + * Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted. * * @element ANY * @@ -58,6 +60,7 @@ var ngTranscludeDirective = ngDirective({ link: function($scope, $element, $attrs, controller) { controller.$transclude(function(clone) { + $element.html(''); $element.append(clone); }); } diff --git a/test/ng/compileSpec.js b/test/ng/compileSpec.js index 7c24e1d98feb..844511a3bb3d 100755 --- a/test/ng/compileSpec.js +++ b/test/ng/compileSpec.js @@ -2450,7 +2450,7 @@ describe('$compile', function() { element = $compile('
childContentText;
')($rootScope); $rootScope.$apply(); expect(log).toEqual('parentController; childController'); - expect(element.text()).toBe('parentTemplateText;childTemplateText;childContentText;') + expect(element.text()).toBe('childTemplateText;childContentText;') }); }); @@ -2554,7 +2554,7 @@ describe('$compile', function() { '')($rootScope); $rootScope.$apply(); expect(log).toEqual('parentController; childController; babyController'); - expect(element.text()).toBe('parentTemplateText;childTemplateText;childContentText;babyTemplateText;') + expect(element.text()).toBe('childContentText;babyTemplateText;') }); }); @@ -2825,6 +2825,24 @@ describe('$compile', function() { }); + it('should clear contents of the ng-translude element before appending transcluded content', + function() { + module(function() { + directive('trans', function() { + return { + transclude: true, + template: '
old stuff!
' + }; + }); + }); + inject(function(log, $rootScope, $compile) { + element = $compile('
unicorn!
')($rootScope); + $rootScope.$apply(); + expect(sortedHtml(element.html())).toEqual('
unicorn!
'); + }); + }); + + it('should make the result of a transclusion available to the parent directive in post-linking phase (template)', function() { module(function() {