diff options
Diffstat (limited to 'src/ng/directive/ngInclude.js')
| -rw-r--r-- | src/ng/directive/ngInclude.js | 70 | 
1 files changed, 31 insertions, 39 deletions
| diff --git a/src/ng/directive/ngInclude.js b/src/ng/directive/ngInclude.js index 90fd0b40..f1c836f0 100644 --- a/src/ng/directive/ngInclude.js +++ b/src/ng/directive/ngInclude.js @@ -15,8 +15,6 @@   *   * @param {string} ng-include|src angular expression evaluating to URL. If the source is a string constant,   *                 make sure you wrap it in quotes, e.g. `src="'myPartialTemplate.html'"`. - * @param {Scope=} [scope=new_child_scope] optional expression which evaluates to an - *                 instance of angular.module.ng.$rootScope.Scope to set the HTML fragment to.   * @param {string=} onload Expression to evaluate when a new partial is loaded.   *   * @param {string=} autoscroll Whether `ng-include` should call {@link angular.module.ng.$anchorScroll @@ -78,8 +76,7 @@ var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile'    return {      restrict: 'EA',      compile: function(element, attr) { -      var srcExp = attr.ngInclude  || attr.src, -          scopeExp = attr.scope || '', +      var srcExp = attr.ngInclude || attr.src,            onloadExp = attr.onload || '',            autoScrollExp = attr.autoscroll; @@ -87,45 +84,40 @@ var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile'          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); +        var clearContent = function() { +          if (childScope) { +            childScope.$destroy(); +            childScope = null; +          } + +          element.html(''); +        }; + +        scope.$watch(srcExp, function(src) { +          var thisChangeId = ++changeCounter; + +          if (src) { +            $http.get(src, {cache: $templateCache}).success(function(response) { +              if (thisChangeId !== changeCounter) return; -          function clearContent() { -            // if this callback is still desired -            if (newChangeCounter === changeCounter) {                if (childScope) childScope.$destroy(); -              childScope = null; -              element.html(''); -            } -          } +              childScope = scope.$new(); + +              element.html(response); +              $compile(element.contents())(childScope); + +              if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) { +                $anchorScroll(); +              } -           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(); -                 } -                 scope.$emit('$includeContentLoaded'); -                 scope.$eval(onloadExp); -               } -             }).error(clearContent); -           } else { -             clearContent(); -           } +              scope.$emit('$includeContentLoaded'); +              scope.$eval(onloadExp); +            }).error(function() { +              if (thisChangeId === changeCounter) clearContent(); +            }); +          } else clearContent();          });        };      } -  } +  };  }]; | 
