diff options
| author | Vojta Jina | 2012-03-04 00:53:45 -0800 |
|---|---|---|
| committer | Vojta Jina | 2012-03-05 10:41:59 -0800 |
| commit | c2989f6cc6ea8be34101b9ab9bc25d14a2468e20 (patch) | |
| tree | e831412004458783740f3718c36f9c6e6da8830e | |
| parent | 4f797fe5f38cab06d1bb9c946cd39ce31aaa2483 (diff) | |
| download | angular.js-c2989f6cc6ea8be34101b9ab9bc25d14a2468e20.tar.bz2 | |
fix(ng-include): Compile only content
| -rw-r--r-- | src/widgets.js | 82 | ||||
| -rw-r--r-- | test/widgetsSpec.js | 18 |
2 files changed, 58 insertions, 42 deletions
diff --git a/src/widgets.js b/src/widgets.js index a32abb75..66ea7fef 100644 --- a/src/widgets.js +++ b/src/widgets.js @@ -69,51 +69,49 @@ var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile' var srcExp = attr.src, scopeExp = attr.scope || '', autoScrollExp = attr.autoscroll; - if (!element[0]['ng:compiled']) { - element[0]['ng:compiled'] = true; - return function(scope, element, attr){ - var changeCounter = 0, - childScope; - - function incrementChange() { changeCounter++;} - scope.$watch(srcExp, incrementChange); - scope.$watch(function() { - var includeScope = scope.$eval(scopeExp); - if (includeScope) return includeScope.$id; - }, incrementChange); - scope.$watch(function() {return changeCounter;}, function(newChangeCounter) { - var src = scope.$eval(srcExp), - useScope = scope.$eval(scopeExp); - - function clearContent() { - // if this callback is still desired - if (newChangeCounter === changeCounter) { - if (childScope) childScope.$destroy(); - childScope = null; - element.html(''); - } + + return function(scope, element, attr) { + var changeCounter = 0, + childScope; + + function incrementChange() { changeCounter++;} + scope.$watch(srcExp, incrementChange); + scope.$watch(function() { + var includeScope = scope.$eval(scopeExp); + if (includeScope) return includeScope.$id; + }, incrementChange); + scope.$watch(function() {return changeCounter;}, function(newChangeCounter) { + var src = scope.$eval(srcExp), + useScope = scope.$eval(scopeExp); + + function clearContent() { + // if this callback is still desired + if (newChangeCounter === changeCounter) { + if (childScope) childScope.$destroy(); + childScope = null; + element.html(''); } + } - if (src) { - $http.get(src, {cache: $templateCache}).success(function(response) { - // if this callback is still desired - if (newChangeCounter === changeCounter) { - element.html(response); - if (childScope) childScope.$destroy(); - childScope = useScope ? useScope : scope.$new(); - $compile(element)(childScope); - if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) { - $anchorScroll(); - } - scope.$emit('$contentLoaded'); + if (src) { + $http.get(src, {cache: $templateCache}).success(function(response) { + // if this callback is still desired + if (newChangeCounter === changeCounter) { + element.html(response); + if (childScope) childScope.$destroy(); + childScope = useScope ? useScope : scope.$new(); + $compile(element.contents())(childScope); + if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) { + $anchorScroll(); } - }).error(clearContent); - } else { - clearContent(); - } - }); - }; - } + scope.$emit('$contentLoaded'); + } + }).error(clearContent); + } else { + clearContent(); + } + }); + }; } } }]; diff --git a/test/widgetsSpec.js b/test/widgetsSpec.js index f75d81c2..3d2f0a56 100644 --- a/test/widgetsSpec.js +++ b/test/widgetsSpec.js @@ -245,6 +245,24 @@ describe('widget', function() { })); + it('should compile only the content', inject(function($compile, $rootScope, $templateCache) { + // regression + + var onload = jasmine.createSpy('$contentLoaded'); + $rootScope.$on('$contentLoaded', onload); + $templateCache.put('tpl.html', [200, 'partial {{tpl}}', {}]); + + element = $compile('<div><div ng:repeat="i in [1]">' + + '<ng:include src="tpl"></ng:include></div></div>')($rootScope); + expect(onload).not.toHaveBeenCalled(); + + $rootScope.$apply(function() { + $rootScope.tpl = 'tpl.html'; + }); + expect(onload).toHaveBeenCalledOnce(); + })); + + describe('autoscoll', function() { var autoScrollSpy; |
