diff options
| -rw-r--r-- | src/ng/directive/ngTransclude.js | 5 | ||||
| -rwxr-xr-x | 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 0b9b919d..71d0635a 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 7c24e1d9..844511a3 100755 --- a/test/ng/compileSpec.js +++ b/test/ng/compileSpec.js @@ -2450,7 +2450,7 @@ describe('$compile', function() { element = $compile('<div parent-directive><div child-directive></div>childContentText;</div>')($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() { '</div>')($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: '<div ng-transclude>old stuff! </div>' + }; + }); + }); + inject(function(log, $rootScope, $compile) { + element = $compile('<div trans>unicorn!</div>')($rootScope); + $rootScope.$apply(); + expect(sortedHtml(element.html())).toEqual('<div ng-transclude=""><span>unicorn!</span></div>'); + }); + }); + + it('should make the result of a transclusion available to the parent directive in post-linking phase (template)', function() { module(function() { |
