diff --git a/packages/router/src/create_url_tree.ts b/packages/router/src/create_url_tree.ts index c454af5099..871fb4f0dc 100644 --- a/packages/router/src/create_url_tree.ts +++ b/packages/router/src/create_url_tree.ts @@ -147,14 +147,17 @@ function findStartingPosition(nav: Navigation, tree: UrlTree, route: ActivatedRo return new Position(tree.root, true, 0); } + const segmentGroup = route.snapshot._urlSegment; + if (route.snapshot._lastPathIndex === -1) { - return new Position(route.snapshot._urlSegment, true, 0); + // Pathless ActivatedRoute has _lastPathIndex === -1 but should not process children + // see issue #26224 + return new Position(segmentGroup, segmentGroup.segments.length === 0, 0); } const modifier = isMatrixParams(nav.commands[0]) ? 0 : 1; const index = route.snapshot._lastPathIndex + modifier; - return createPositionApplyingDoubleDots( - route.snapshot._urlSegment, index, nav.numberOfDoubleDots); + return createPositionApplyingDoubleDots(segmentGroup, index, nav.numberOfDoubleDots); } function createPositionApplyingDoubleDots( diff --git a/packages/router/test/create_url_tree.spec.ts b/packages/router/test/create_url_tree.spec.ts index 6b0e40a48e..487d65deea 100644 --- a/packages/router/test/create_url_tree.spec.ts +++ b/packages/router/test/create_url_tree.spec.ts @@ -233,6 +233,12 @@ describe('createUrlTree', () => { const t = create(p.root.children[PRIMARY_OUTLET], 1, p, [{outlets: {right: ['c']}}]); expect(serializer.serialize(t)).toEqual('/a/b/(right:c)'); }); + + it('should support pathless route', () => { + const p = serializer.parse('/a'); + const t = create(p.root.children[PRIMARY_OUTLET], -1, p, ['b']); + expect(serializer.serialize(t)).toEqual('/b'); + }); }); it('should set fragment', () => { @@ -260,8 +266,8 @@ function create( expect(segment).toBeDefined(); } const s = new (ActivatedRouteSnapshot as any)( - [], {}, {}, '', {}, PRIMARY_OUTLET, 'someComponent', null, segment, - startIndex, null); + segment.segments, {}, {}, '', {}, PRIMARY_OUTLET, 'someComponent', null, + segment, startIndex, null); const a = new (ActivatedRoute as any)( new BehaviorSubject(null !), new BehaviorSubject(null !), new BehaviorSubject(null !), new BehaviorSubject(null !), new BehaviorSubject(null !), PRIMARY_OUTLET, 'someComponent', s);