fix(router): fix navigation from the root component ngOnInit hook (#13932)

Closes #13795

PR Close #13932
This commit is contained in:
Dzmitry Shylovich 2017-01-15 01:05:24 +03:00 committed by Miško Hevery
parent e075b1ba83
commit 47d41d492b
2 changed files with 24 additions and 1 deletions

View File

@ -364,7 +364,9 @@ export class Router {
*/
initialNavigation(): void {
this.setUpLocationChangeListener();
this.navigateByUrl(this.location.path(true), {replaceUrl: true});
if (this.navigationId === 0) {
this.navigateByUrl(this.location.path(true), {replaceUrl: true});
}
}
/**

View File

@ -37,6 +37,18 @@ describe('Integration', () => {
expect(location.path()).toEqual('/simple');
})));
it('should navigate from ngOnInit hook',
fakeAsync(inject([Router, Location], (router: Router, location: Location) => {
router.resetConfig([
{path: '', component: SimpleCmp},
{path: 'one', component: RouteCmp},
]);
const fixture = createRoot(router, RootCmpWithOnInit);
expect(location.path()).toEqual('/one');
expect(fixture.nativeElement).toHaveText('route');
})));
describe('should execute navigations serially', () => {
let log: any[] = [];
@ -2932,6 +2944,13 @@ class ComponentRecordingRoutePathAndUrl {
class RootCmp {
}
@Component({selector: 'root-cmp-on-init', template: `<router-outlet></router-outlet>`})
class RootCmpWithOnInit {
constructor(private router: Router) {}
ngOnInit(): void { this.router.navigate(['one']); }
}
@Component({
selector: 'root-cmp',
template:
@ -3003,6 +3022,7 @@ function createRoot(router: Router, type: any): ComponentFixture<any> {
ComponentRecordingRoutePathAndUrl,
RouteCmp,
RootCmp,
RootCmpWithOnInit,
RelativeLinkInIfCmp,
RootCmpWithTwoOutlets,
EmptyQueryParamsCmp,
@ -3030,6 +3050,7 @@ function createRoot(router: Router, type: any): ComponentFixture<any> {
ComponentRecordingRoutePathAndUrl,
RouteCmp,
RootCmp,
RootCmpWithOnInit,
RelativeLinkInIfCmp,
RootCmpWithTwoOutlets,
EmptyQueryParamsCmp,