fix(router): change processing url tree children condition (#26243)

stop adding next path of pathless activated route to the url

PR Close #26224

PR Close #26243
This commit is contained in:
miginmrs 2018-10-04 08:31:41 +01:00 committed by Igor Minar
parent f52600e261
commit ccc77ca441
2 changed files with 14 additions and 5 deletions

View File

@ -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(

View File

@ -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)(
[], <any>{}, <any>{}, '', <any>{}, PRIMARY_OUTLET, 'someComponent', null, <any>segment,
startIndex, <any>null);
segment.segments, <any>{}, <any>{}, '', <any>{}, PRIMARY_OUTLET, 'someComponent', null,
<any>segment, startIndex, <any>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);