mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-16 23:30:23 +00:00
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
This commit is contained in:
parent
68d71bbc01
commit
c47abd0dd7
2 changed files with 33 additions and 7 deletions
|
|
@ -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);
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue