diff options
| author | Vojta Jina | 2012-03-30 15:03:20 -0700 |
|---|---|---|
| committer | Vojta Jina | 2012-04-03 10:10:44 -0700 |
| commit | 15c1fe392942b70e456f10afbdfd9c3329249a43 (patch) | |
| tree | bec93d124ab8bc1cbd283e250be5b037bcc1fce7 /src | |
| parent | 428f2b563663315df4f235ca19cef4bdcf82e2ab (diff) | |
| download | angular.js-15c1fe392942b70e456f10afbdfd9c3329249a43.tar.bz2 | |
refactor(ngView): remove extra $watch, refactor one ugly test
Diffstat (limited to 'src')
| -rw-r--r-- | src/ng/directive/ngView.js | 36 |
1 files changed, 19 insertions, 17 deletions
diff --git a/src/ng/directive/ngView.js b/src/ng/directive/ngView.js index 95b1546d..b305af0b 100644 --- a/src/ng/directive/ngView.js +++ b/src/ng/directive/ngView.js @@ -115,42 +115,44 @@ var ngViewDirective = ['$http', '$templateCache', '$route', '$anchorScroll', '$c lastScope, onloadExp = attr.onload || ''; - scope.$on('$afterRouteChange', function(event, next, previous) { - changeCounter++; - }); + scope.$on('$afterRouteChange', update); + update(); - scope.$watch(function() {return changeCounter;}, function(newChangeCounter) { - var template = $route.current && $route.current.template; - function destroyLastScope() { - if (lastScope) { - lastScope.$destroy(); - lastScope = null; - } + function destroyLastScope() { + if (lastScope) { + lastScope.$destroy(); + lastScope = null; } + } + + function update() { + var template = $route.current && $route.current.template, + thisChangeId = ++changeCounter; function clearContent() { // ignore callback if another route change occured since - if (newChangeCounter == changeCounter) { + if (thisChangeId === changeCounter) { element.html(''); + destroyLastScope(); } - destroyLastScope(); } if (template) { $http.get(template, {cache: $templateCache}).success(function(response) { // ignore callback if another route change occured since - if (newChangeCounter == changeCounter) { + if (thisChangeId === changeCounter) { element.html(response); destroyLastScope(); var link = $compile(element.contents()), - current = $route.current; + current = $route.current, + controller; lastScope = current.scope = scope.$new(); if (current.controller) { - element.contents(). - data('$ngControllerController', $controller(current.controller, {$scope: lastScope})); + controller = $controller(current.controller, {$scope: lastScope}); + element.contents().data('$ngControllerController', controller); } link(lastScope); @@ -164,7 +166,7 @@ var ngViewDirective = ['$http', '$templateCache', '$route', '$anchorScroll', '$c } else { clearContent(); } - }); + } } }; }]; |
