Skip to content

Commit

Permalink
fix(ngView): accidentally compiling leaving content
Browse files Browse the repository at this point in the history
closes: angular#2304
  • Loading branch information
mhevery authored and matsko committed May 6, 2013
1 parent d96e19f commit a0e1d93
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 4 deletions.
5 changes: 3 additions & 2 deletions src/ng/directive/ngView.js
Original file line number Diff line number Diff line change
Expand Up @@ -194,9 +194,10 @@ var ngViewDirective = ['$http', '$templateCache', '$route', '$anchorScroll', '$c

if (template) {
clearContent();
animate.enter(jqLite('<div></div>').html(template).contents(), element);
var enterElements = jqLite('<div></div>').html(template).contents();
animate.enter(enterElements, element);

var link = $compile(element.contents()),
var link = $compile(enterElements),
current = $route.current,
controller;

Expand Down
46 changes: 44 additions & 2 deletions test/ng/directive/ngViewSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
describe('ngView', function() {
var element;

beforeEach(module(function() {
beforeEach(module(function($provide) {
$provide.value('$window', angular.mock.createMockWindow());
return function($rootScope, $compile, $animator) {
element = $compile('<ng:view onload="load()"></ng:view>')($rootScope);
$animator.enabled(true);
Expand Down Expand Up @@ -621,5 +622,46 @@ describe('ngView', function() {
}
}));


it('should not double compile when route changes', function() {
module(function($routeProvider, $animationProvider, $provide) {
$routeProvider.when('/foo', {template: '<div ng-repeat="i in [1,2]">{{i}}</div>'});
$routeProvider.when('/bar', {template: '<div ng-repeat="i in [3,4]">{{i}}</div>'});
$animationProvider.register('my-animation-leave', function() {
return {
start: function(element, done) {
done();
}
};
});
});

inject(function($rootScope, $compile, $location, $route, $window, $rootElement, $sniffer) {
element = $compile(html('<ng:view onload="load()" ng-animate="\'my-animation\'"></ng:view>'))($rootScope);

$location.path('/foo');
$rootScope.$digest();
if ($sniffer.supportsTransitions) {
$window.setTimeout.expect(1).process();
$window.setTimeout.expect(0).process();
}
expect(element.text()).toEqual('12');

$location.path('/bar');
$rootScope.$digest();
expect(n(element.text())).toEqual('1234');
if ($sniffer.supportsTransitions) {
$window.setTimeout.expect(1).process();
$window.setTimeout.expect(1).process();
} else {
$window.setTimeout.expect(1).process();
}
expect(element.text()).toEqual('34');

function n(text) {
return text.replace(/\r\n/m, '').replace(/\r\n/m, '');
}
});
});
});
});
});

0 comments on commit a0e1d93

Please sign in to comment.