fix(router): update the router not to reset router state when updating root component (#11799)

This commit is contained in:
Victor Savkin 2016-09-21 11:37:43 -07:00 committed by Alex Eagle
parent 212f8dbde7
commit 31dce72b7b
2 changed files with 22 additions and 2 deletions

View File

@ -323,7 +323,9 @@ export class Router {
*/ */
resetRootComponentType(rootComponentType: Type<any>): void { resetRootComponentType(rootComponentType: Type<any>): void {
this.rootComponentType = rootComponentType; this.rootComponentType = rootComponentType;
this.currentRouterState = createEmptyState(this.currentUrlTree, this.rootComponentType); // TODO: vsavkin router 4.0 should make the root component set to null
// this will simplify the lifecycle of the router.
this.currentRouterState.root.component = this.rootComponentType;
} }
/** /**

View File

@ -6,13 +6,31 @@
* found in the LICENSE file at https://angular.io/license * found in the LICENSE file at https://angular.io/license
*/ */
import {PreActivation} from '../src/router'; import {TestBed} from '@angular/core/testing';
import {PreActivation, Router} from '../src/router';
import {RouterOutletMap} from '../src/router_outlet_map'; import {RouterOutletMap} from '../src/router_outlet_map';
import {ActivatedRouteSnapshot, InheritedResolve, RouterStateSnapshot, createEmptyStateSnapshot} from '../src/router_state'; import {ActivatedRouteSnapshot, InheritedResolve, RouterStateSnapshot, createEmptyStateSnapshot} from '../src/router_state';
import {DefaultUrlSerializer} from '../src/url_tree'; import {DefaultUrlSerializer} from '../src/url_tree';
import {TreeNode} from '../src/utils/tree'; import {TreeNode} from '../src/utils/tree';
import {RouterTestingModule} from '../testing/router_testing_module';
describe('Router', () => { describe('Router', () => {
describe('resetRootComponentType', () => {
class NewRootComponent {}
beforeEach(() => { TestBed.configureTestingModule({imports: [RouterTestingModule]}); });
it('should not change root route when updating the root component', () => {
const r: Router = TestBed.get(Router);
const root = r.routerState.root;
r.resetRootComponentType(NewRootComponent);
expect(r.routerState.root).toBe(root);
});
});
describe('PreActivation', () => { describe('PreActivation', () => {
const serializer = new DefaultUrlSerializer(); const serializer = new DefaultUrlSerializer();
const inj = {get: (token: any) => () => `${token}_value`}; const inj = {get: (token: any) => () => `${token}_value`};