diff options
| author | Brian Ford | 2013-11-20 11:04:38 -0800 |
|---|---|---|
| committer | Brian Ford | 2013-11-20 13:58:54 -0800 |
| commit | c47abd0dd7490576f4b84ee51ebaca385c1036da (patch) | |
| tree | 759e4f8906cde39b48b605ed86708da47d07eab1 | |
| parent | 68d71bbc01d4fc1a1124039322ce5ec946f4d26f (diff) | |
| download | angular.js-c47abd0dd7490576f4b84ee51ebaca385c1036da.tar.bz2 | |
fix(ngInclude): allow ngInclude to load scripts when jQuery is included
In 1.2, the behavior of ngInclude was modified to use DOM APIs rather than jqLite. This means that
even when jQuery was loaded, ngInclude was not calling into it, and thus scripts were not eval'd
as they had been before. Although the use of ngInclude to eval scripts as a lazy-loading strategy
was never an intentional feature, this patch restores the ability to do so.
Closes #3756
| -rw-r--r-- | src/ng/animate.js | 15 | ||||
| -rw-r--r-- | test/ng/directive/ngIncludeSpec.js | 25 |
2 files changed, 33 insertions, 7 deletions
diff --git a/src/ng/animate.js b/src/ng/animate.js index bb08410c..b662d9c1 100644 --- a/src/ng/animate.js +++ b/src/ng/animate.js @@ -99,13 +99,14 @@ var $AnimateProvider = ['$provide', function($provide) { * inserted into the DOM */ enter : function(element, parent, after, done) { - var afterNode = after && after[after.length - 1]; - var parentNode = parent && parent[0] || afterNode && afterNode.parentNode; - // IE does not like undefined so we have to pass null. - var afterNextSibling = (afterNode && afterNode.nextSibling) || null; - forEach(element, function(node) { - parentNode.insertBefore(node, afterNextSibling); - }); + if (after) { + after.after(element); + } else { + if (!parent || !parent[0]) { + parent = after.parent(); + } + parent.append(element); + } done && $timeout(done, 0, false); }, diff --git a/test/ng/directive/ngIncludeSpec.js b/test/ng/directive/ngIncludeSpec.js index aba71e44..59f8b4ae 100644 --- a/test/ng/directive/ngIncludeSpec.js +++ b/test/ng/directive/ngIncludeSpec.js @@ -312,6 +312,31 @@ describe('ngInclude', function() { })); + it('should exec scripts when jQuery is included', inject(function($compile, $rootScope, $httpBackend) { + if (!jQuery) { + return; + } + + element = $compile('<div><span ng-include="includeUrl"></span></div>')($rootScope); + + // the element needs to be appended for the script to run + element.appendTo(document.body); + window._ngIncludeCausesScriptToRun = false; + $httpBackend.expect('GET', 'url1').respond('<script>window._ngIncludeCausesScriptToRun = true;</script>'); + $rootScope.includeUrl = 'url1'; + $rootScope.$digest(); + $httpBackend.flush(); + + expect(window._ngIncludeCausesScriptToRun).toBe(true); + + // IE8 doesn't like deleting properties of window + window._ngIncludeCausesScriptToRun = undefined; + try { + delete window._ngIncludeCausesScriptToRun; + } catch (e) {} + })); + + describe('autoscroll', function() { var autoScrollSpy; |
