diff options
Diffstat (limited to 'src/ngRoute')
| -rw-r--r-- | src/ngRoute/directive/ngView.js | 64 | 
1 files changed, 35 insertions, 29 deletions
diff --git a/src/ngRoute/directive/ngView.js b/src/ngRoute/directive/ngView.js index 3271ac0c..280bf423 100644 --- a/src/ngRoute/directive/ngView.js +++ b/src/ngRoute/directive/ngView.js @@ -199,37 +199,43 @@ function ngViewFactory(   $route,   $anchorScroll,   $compile,   $controller,            if (template) {              var newScope = scope.$new(); -            $transclude(newScope, function(clone) { -              clone.html(template); -              $animate.enter(clone, null, currentElement || $element, function onNgViewEnter () { -                if (angular.isDefined(autoScrollExp) -                  && (!autoScrollExp || scope.$eval(autoScrollExp))) { -                  $anchorScroll(); -                } -              }); - -              cleanupLastView(); - -              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.children().data('$ngControllerController', controller); -              } -              link(currentScope); -              currentScope.$emit('$viewContentLoaded'); -              currentScope.$eval(onloadExp); +            // Note: This will also link all children of ng-view that were contained in the original +            // html. If that content contains controllers, ... they could pollute/change the scope. +            // However, using ng-view 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, angular.noop); +            clone.html(template); +            $animate.enter(clone, null, currentElement || $element, function onNgViewEnter () { +              if (angular.isDefined(autoScrollExp) +                && (!autoScrollExp || scope.$eval(autoScrollExp))) { +                $anchorScroll(); +              }              }); + +            cleanupLastView(); + +            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.children().data('$ngControllerController', controller); +            } + +            link(currentScope); +            currentScope.$emit('$viewContentLoaded'); +            currentScope.$eval(onloadExp);            } else {              cleanupLastView();            }  | 
