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: '
',
+ $routeConfig: [
+ { path: '/b', component: 'oneCmp' }
+ ]
+ });
+
+ $router.config([
+ { path: '/...', component: 'childCmp' }
+ ]);
+ compile('');
+
+ $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})