Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Revert transclusion commits #3640

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 16 additions & 19 deletions src/ng/directive/ngInclude.js
Original file line number Diff line number Diff line change
Expand Up @@ -149,23 +149,18 @@
* @description
* Emitted every time the ngInclude content is reloaded.
*/
var NG_INCLUDE_PRIORITY = 500;
var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile', '$animate', '$sce',
function($http, $templateCache, $anchorScroll, $compile, $animate, $sce) {
return {
restrict: 'ECA',
terminal: true,
priority: NG_INCLUDE_PRIORITY,
compile: function(element, attr) {
transclude: 'element',
compile: function(element, attr, transclusion) {
var srcExp = attr.ngInclude || attr.src,
onloadExp = attr.onload || '',
autoScrollExp = attr.autoscroll;

element.html('');
var anchor = jqLite(document.createComment(' ngInclude: ' + srcExp + ' '));
element.replaceWith(anchor);

return function(scope) {
return function(scope, $element) {
var changeCounter = 0,
currentScope,
currentElement;
Expand All @@ -189,21 +184,23 @@ var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile'
if (thisChangeId !== changeCounter) return;
var newScope = scope.$new();

cleanupLastIncludeContent();
transclusion(newScope, function(clone) {
cleanupLastIncludeContent();

currentScope = newScope;
currentElement = element.clone();
currentElement.html(response);
$animate.enter(currentElement, null, anchor);
currentScope = newScope;
currentElement = clone;

$compile(currentElement, false, NG_INCLUDE_PRIORITY - 1)(currentScope);
currentElement.html(response);
$animate.enter(currentElement, null, $element);
$compile(currentElement.contents())(currentScope);

if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) {
$anchorScroll();
}
if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) {
$anchorScroll();
}

currentScope.$emit('$includeContentLoaded');
scope.$eval(onloadExp);
currentScope.$emit('$includeContentLoaded');
scope.$eval(onloadExp);
});
}).error(function() {
if (thisChangeId === changeCounter) cleanupLastIncludeContent();
});
Expand Down
80 changes: 38 additions & 42 deletions src/ngRoute/directive/ngView.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
'use strict';

ngRouteModule.directive('ngView', ngViewFactory);

/**
* @ngdoc directive
* @name ngRoute.directive:ngView
Expand Down Expand Up @@ -167,22 +169,17 @@
* @description
* Emitted every time the ngView content is reloaded.
*/
var NG_VIEW_PRIORITY = 500;
var ngViewDirective = ['$route', '$anchorScroll', '$compile', '$controller', '$animate',
function($route, $anchorScroll, $compile, $controller, $animate) {
ngViewFactory.$inject = ['$route', '$anchorScroll', '$compile', '$controller', '$animate'];
function ngViewFactory( $route, $anchorScroll, $compile, $controller, $animate) {
return {
restrict: 'ECA',
terminal: true,
priority: NG_VIEW_PRIORITY,
compile: function(element, attr) {
var onloadExp = attr.onload || '';

element.html('');
var anchor = jqLite(document.createComment(' ngView '));
element.replaceWith(anchor);

return function(scope) {
var currentScope, currentElement;
transclude: 'element',
compile: function(element, attr, linker) {
return function(scope, $element, attr) {
var currentScope,
currentElement,
onloadExp = attr.onload || '';

scope.$on('$routeChangeSuccess', update);
update();
Expand All @@ -203,42 +200,41 @@ var ngViewDirective = ['$route', '$anchorScroll', '$compile', '$controller', '$a
template = locals && locals.$template;

if (template) {
cleanupLastView();

currentScope = scope.$new();
currentElement = element.clone();
currentElement.html(template);
$animate.enter(currentElement, null, anchor);

var link = $compile(currentElement, false, NG_VIEW_PRIORITY - 1),
current = $route.current;

if (current.controller) {
locals.$scope = currentScope;
var controller = $controller(current.controller, locals);
if (current.controllerAs) {
currentScope[current.controllerAs] = controller;
var newScope = scope.$new();
linker(newScope, function(clone) {
cleanupLastView();

clone.html(template);
$animate.enter(clone, null, $element);

var link = $compile(clone.contents()),
current = $route.current;

currentScope = current.scope = newScope;
currentElement = clone;

if (current.controller) {
locals.$scope = currentScope;
var controller = $controller(current.controller, locals);
if (current.controllerAs) {
currentScope[current.controllerAs] = controller;
}
clone.data('$ngControllerController', controller);
clone.contents().data('$ngControllerController', controller);
}
currentElement.data('$ngControllerController', controller);
currentElement.children().data('$ngControllerController', controller);
}

current.scope = currentScope;

link(currentScope);
link(currentScope);
currentScope.$emit('$viewContentLoaded');
currentScope.$eval(onloadExp);

currentScope.$emit('$viewContentLoaded');
currentScope.$eval(onloadExp);

// $anchorScroll might listen on event...
$anchorScroll();
// $anchorScroll might listen on event...
$anchorScroll();
});
} else {
cleanupLastView();
}
}
}
}
};
}];

ngRouteModule.directive('ngView', ngViewDirective);
}
25 changes: 0 additions & 25 deletions test/ng/directive/ngIncludeSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -280,31 +280,6 @@ describe('ngInclude', function() {
dealoc(element);
}));

it('should compile only the inner content once', function() {
var log = [];

module(function($compileProvider) {
$compileProvider.directive('compileLog', function() {
return {
compile: function() {
log.push('compile');
}
};
});
});

inject(function($compile, $rootScope, $templateCache) {
$templateCache.put('tpl.html', [200, '<div compile-log>123</div>', {}]);
element = $compile('<div><div ng-include="exp"></div></div>')($rootScope);

$rootScope.exp = 'tpl.html';
$rootScope.$digest();

expect(element.text()).toBe('123');
expect(log).toEqual(['compile']);
});
});


describe('autoscoll', function() {
var autoScrollSpy;
Expand Down