diff --git a/src/ngMessages/messages.js b/src/ngMessages/messages.js index 92f60cc64..8805eea81 100644 --- a/src/ngMessages/messages.js +++ b/src/ngMessages/messages.js @@ -552,22 +552,32 @@ angular.module('ngMessages', []) $templateRequest(src).then(function(html) { if ($scope.$$destroyed) return; - $compile(html)($scope, function(contents) { - element.after(contents); - - // the anchor is placed for debugging purposes - var comment = $compile.$$createComment ? - $compile.$$createComment('ngMessagesInclude', src) : - $document[0].createComment(' ngMessagesInclude: ' + src + ' '); - var anchor = jqLite(comment); - element.after(anchor); - - // we don't want to pollute the DOM anymore by keeping an empty directive element - element.remove(); - }); + if (isString(html) && !html.trim()) { + // Empty template - nothing to compile + replaceElementWithMarker(element, src); + } else { + // Non-empty template - compile and link + $compile(html)($scope, function(contents) { + element.after(contents); + replaceElementWithMarker(element, src); + }); + } }); } }; + + // Helpers + function replaceElementWithMarker(element, src) { + // A comment marker is placed for debugging purposes + var comment = $compile.$$createComment ? + $compile.$$createComment('ngMessagesInclude', src) : + $document[0].createComment(' ngMessagesInclude: ' + src + ' '); + var marker = jqLite(comment); + element.after(marker); + + // Don't pollute the DOM anymore by keeping an empty directive element + element.remove(); + } }]) /** diff --git a/test/ngMessages/messagesSpec.js b/test/ngMessages/messagesSpec.js index 9aba45777..79457fa02 100644 --- a/test/ngMessages/messagesSpec.js +++ b/test/ngMessages/messagesSpec.js @@ -815,7 +815,6 @@ describe('ngMessages', function() { expect(trim(element.text())).toEqual("C"); })); - it('should properly detect a previous message, even if it was registered later', inject(function($compile, $rootScope, $templateCache) { $templateCache.put('include.html', '
A
'); @@ -865,6 +864,25 @@ describe('ngMessages', function() { $httpBackend.flush(); }).not.toThrow(); })); + + it('should not throw if the template is empty', + inject(function($compile, $rootScope, $templateCache) { + var html = + '
' + + '
' + + '
' + + '
'; + + $templateCache.put('messages1.html', ''); + $templateCache.put('messages2.html', ' '); + element = $compile(html)($rootScope); + $rootScope.$digest(); + + expect(element.text()).toBe(''); + expect(element.children().length).toBe(0); + expect(element.contents().length).toBe(2); + }) + ); }); describe('when multiple', function() {