From 15c1fe392942b70e456f10afbdfd9c3329249a43 Mon Sep 17 00:00:00 2001
From: Vojta Jina
Date: Fri, 30 Mar 2012 15:03:20 -0700
Subject: refactor(ngView): remove extra $watch, refactor one ugly test
---
src/ng/directive/ngView.js | 36 +++++++++++++++++++-----------------
test/ng/directive/ngViewSpec.js | 40 ++++++++++++++++++----------------------
2 files changed, 37 insertions(+), 39 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();
}
- });
+ }
}
};
}];
diff --git a/test/ng/directive/ngViewSpec.js b/test/ng/directive/ngViewSpec.js
index 636e15a8..4c0b841b 100644
--- a/test/ng/directive/ngViewSpec.js
+++ b/test/ng/directive/ngViewSpec.js
@@ -137,33 +137,29 @@ describe('ng-view', function() {
});
- it('should be possible to nest ng-view in ng-include', inject(function() {
- // TODO(vojta): refactor this test
- dealoc(element);
- var injector = angular.injector(['ng', 'ngMock', function($routeProvider) {
- $routeProvider.when('/foo', {controller: angular.noop, template: 'viewPartial.html'});
- }]);
- var myApp = injector.get('$rootScope');
- var $httpBackend = injector.get('$httpBackend');
- $httpBackend.expect('GET', 'includePartial.html').respond('view: