feat(router): add reuse support for angular 1.x router

Closes #3698
This commit is contained in:
Shahar Talmi
2015-08-18 01:31:41 +03:00
committed by Brian Ford
parent fde026a9e4
commit ddb62feae6
3 changed files with 89 additions and 5 deletions

View File

@ -358,6 +358,76 @@ describe('ngOutlet', function () {
});
it('should reuse a component when the canReuse hook returns true', function () {
var log = [];
var cmpInstanceCount = 0;
function ReuseCmp() {
cmpInstanceCount++;
this.canReuse = function () {
return true;
};
this.onReuse = function (next, prev) {
log.push('reuse: ' + prev.urlPath + ' -> ' + next.urlPath);
};
}
ReuseCmp.$routeConfig = [{path: '/a', component: OneController}, {path: '/b', component: TwoController}];
registerComponent('reuse', 'reuse {<ng-outlet></ng-outlet>}', ReuseCmp);
$router.config([
{ path: '/on-reuse/:number/...', component: ReuseCmp }
]);
compile('outer { <div ng-outlet></div> }');
$router.navigate('/on-reuse/1/a');
$rootScope.$digest();
expect(log).toEqual([]);
expect(cmpInstanceCount).toBe(1);
expect(elt.text()).toBe('outer { reuse {one} }');
$router.navigate('/on-reuse/2/b');
$rootScope.$digest();
expect(log).toEqual(['reuse: on-reuse/1 -> on-reuse/2']);
expect(cmpInstanceCount).toBe(1);
expect(elt.text()).toBe('outer { reuse {two} }');
});
it('should not reuse a component when the canReuse hook returns false', function () {
var log = [];
var cmpInstanceCount = 0;
function NeverReuseCmp() {
cmpInstanceCount++;
this.canReuse = function () {
return false;
};
this.onReuse = function (next, prev) {
log.push('reuse: ' + prev.urlPath + ' -> ' + next.urlPath);
};
}
NeverReuseCmp.$routeConfig = [{path: '/a', component: OneController}, {path: '/b', component: TwoController}];
registerComponent('reuse', 'reuse {<ng-outlet></ng-outlet>}', NeverReuseCmp);
$router.config([
{ path: '/never-reuse/:number/...', component: NeverReuseCmp }
]);
compile('outer { <div ng-outlet></div> }');
$router.navigate('/never-reuse/1/a');
$rootScope.$digest();
expect(log).toEqual([]);
expect(cmpInstanceCount).toBe(1);
expect(elt.text()).toBe('outer { reuse {one} }');
$router.navigate('/never-reuse/2/b');
$rootScope.$digest();
expect(log).toEqual([]);
expect(cmpInstanceCount).toBe(2);
expect(elt.text()).toBe('outer { reuse {two} }');
});
it('should not activate a component when canActivate returns false', function () {
var spy = jasmine.createSpy('activate');
var activate = registerComponent('activate', '', {