diff --git a/modules/angular1_router/test/integration/navigation_spec.js b/modules/angular1_router/test/integration/navigation_spec.js index 51be632a72..a266703270 100644 --- a/modules/angular1_router/test/integration/navigation_spec.js +++ b/modules/angular1_router/test/integration/navigation_spec.js @@ -131,6 +131,26 @@ describe('navigation', function () { expect(elt.text()).toBe('outer { inner { one } }'); }); + it('should work when parent route has empty path', inject(function ($location) { + registerComponent('childCmp', { + template: '
inner {
}
', + $routeConfig: [ + { path: '/b', component: 'oneCmp' } + ] + }); + + $router.config([ + { path: '/...', component: 'childCmp' } + ]); + compile('
outer {
}
'); + + $router.navigateByUrl('/b'); + $rootScope.$digest(); + + expect(elt.text()).toBe('outer { inner { one } }'); + expect($location.path()).toBe('/b'); + })); + it('should work with recursive nested outlets', function () { registerDirective('recurCmp', { diff --git a/modules/angular2/src/router/router.ts b/modules/angular2/src/router/router.ts index a1bd9b0416..d0f2ce3d16 100644 --- a/modules/angular2/src/router/router.ts +++ b/modules/angular2/src/router/router.ts @@ -438,7 +438,7 @@ export class RootRouter extends Router { } var emitPath = instruction.toUrlPath(); var emitQuery = instruction.toUrlQuery(); - if (emitPath.length > 0) { + if (emitPath.length > 0 && emitPath[0] != '/') { emitPath = '/' + emitPath; } @@ -465,7 +465,7 @@ export class RootRouter extends Router { commit(instruction: Instruction, _skipLocationChange: boolean = false): Promise { var emitPath = instruction.toUrlPath(); var emitQuery = instruction.toUrlQuery(); - if (emitPath.length > 0) { + if (emitPath.length > 0 && emitPath[0] != '/') { emitPath = '/' + emitPath; } var promise = super.commit(instruction); diff --git a/modules/angular2/test/router/integration/navigation_spec.ts b/modules/angular2/test/router/integration/navigation_spec.ts index 8e649ec9c2..78c07cfb7d 100644 --- a/modules/angular2/test/router/integration/navigation_spec.ts +++ b/modules/angular2/test/router/integration/navigation_spec.ts @@ -105,6 +105,20 @@ export function main() { }); })); + it('should navigate to child routes when the root component has an empty path', + inject([AsyncTestCompleter, Location], (async, location) => { + compile(tcb, 'outer { }') + .then((rtc) => {fixture = rtc}) + .then((_) => rtr.config([new Route({path: '/...', component: ParentCmp})])) + .then((_) => rtr.navigateByUrl('/b')) + .then((_) => { + fixture.detectChanges(); + expect(fixture.debugElement.nativeElement).toHaveText('outer { inner { hello } }'); + expect(location.urlChanges).toEqual(['/b']); + async.done(); + }); + })); + it('should navigate to child routes of async routes', inject([AsyncTestCompleter], (async) => { compile(tcb, 'outer { }') .then((rtc) => {fixture = rtc})