aboutsummaryrefslogtreecommitdiffstats
path: root/src/ng/directive/ngInclude.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/ng/directive/ngInclude.js')
-rw-r--r--src/ng/directive/ngInclude.js29
1 files changed, 17 insertions, 12 deletions
diff --git a/src/ng/directive/ngInclude.js b/src/ng/directive/ngInclude.js
index 7f395f96..b721aa23 100644
--- a/src/ng/directive/ngInclude.js
+++ b/src/ng/directive/ngInclude.js
@@ -188,18 +188,23 @@ var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile'
if (thisChangeId !== changeCounter) return;
var newScope = scope.$new();
- $transclude(newScope, function(clone) {
- cleanupLastIncludeContent();
-
- currentScope = newScope;
- currentElement = clone;
-
- currentElement.html(response);
- $animate.enter(currentElement, null, $element, afterAnimation);
- $compile(currentElement.contents())(currentScope);
- currentScope.$emit('$includeContentLoaded');
- scope.$eval(onloadExp);
- });
+ // Note: This will also link all children of ng-include that were contained in the original
+ // html. If that content contains controllers, ... they could pollute/change the scope.
+ // However, using ng-include on an element with additional content does not make sense...
+ // Note: We can't remove them in the cloneAttchFn of $transclude as that
+ // function is called before linking the content, which would apply child
+ // directives to non existing elements.
+ var clone = $transclude(newScope, noop);
+ cleanupLastIncludeContent();
+
+ currentScope = newScope;
+ currentElement = clone;
+
+ currentElement.html(response);
+ $animate.enter(currentElement, null, $element, afterAnimation);
+ $compile(currentElement.contents())(currentScope);
+ currentScope.$emit('$includeContentLoaded');
+ scope.$eval(onloadExp);
}).error(function() {
if (thisChangeId === changeCounter) cleanupLastIncludeContent();
});