fix(router): handle when both primary and secondary are empty-path and primary has a child
This commit is contained in:
parent
06e4ca4bb3
commit
2b63330a36
|
@ -342,7 +342,7 @@ function createChildrenForEmptyPaths(
|
|||
const res: {[name: string]: UrlSegment} = {};
|
||||
res[PRIMARY_OUTLET] = primarySegment;
|
||||
for (let r of routes) {
|
||||
if (r.path === '') {
|
||||
if (r.path === '' && getOutlet(r) !== PRIMARY_OUTLET) {
|
||||
res[getOutlet(r)] = new UrlSegment([], {});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,7 +60,7 @@ import {UrlTree} from '../url_tree';
|
|||
component</a>
|
||||
* ```
|
||||
*
|
||||
* The router link directive always treats it the provided input as a delta to the current url.
|
||||
* The router link directive always treats the provided input as a delta to the current url.
|
||||
*
|
||||
* For instance, if the current url is `/user/(box//aux:team)`.
|
||||
*
|
||||
|
|
|
@ -128,8 +128,6 @@ function processPathsWithParamsAgainstRoute(
|
|||
const childConfig = getChildConfig(route);
|
||||
|
||||
const {segment, slicedPath} = split(rawSegment, consumedPaths, rawSlicedPath, childConfig);
|
||||
// console.log("raw", rawSegment)
|
||||
// console.log(segment.toString(), childConfig)
|
||||
|
||||
const snapshot = new ActivatedRouteSnapshot(
|
||||
consumedPaths, Object.freeze(merge(inherited.allParams, parameters)),
|
||||
|
@ -292,7 +290,7 @@ function createChildrenForEmptyPaths(
|
|||
primarySegment._pathIndexShift = consumedPaths.length;
|
||||
|
||||
for (let r of routes) {
|
||||
if (r.path === '') {
|
||||
if (r.path === '' && getOutlet(r) !== PRIMARY_OUTLET) {
|
||||
const s = new UrlSegment([], {});
|
||||
s._sourceSegment = segment;
|
||||
s._pathIndexShift = consumedPaths.length;
|
||||
|
|
|
@ -289,7 +289,7 @@ export class Router {
|
|||
* router.navigate(['team', 33, 'team', '11], {relativeTo: route});
|
||||
* ```
|
||||
*
|
||||
* In opposite to `navigateByUrl`, `navigate` always takes a detla
|
||||
* In opposite to `navigateByUrl`, `navigate` always takes a delta
|
||||
* that is applied to the current URL.
|
||||
*/
|
||||
navigate(commands: any[], extras: NavigationExtras = {}): Promise<boolean> {
|
||||
|
|
|
@ -15,6 +15,7 @@ import {LoadedRouterConfig} from '../src/router_config_loader';
|
|||
import {DefaultUrlSerializer, UrlSegment, UrlTree, equalPathsWithParams} from '../src/url_tree';
|
||||
|
||||
describe('applyRedirects', () => {
|
||||
|
||||
it('should return the same url tree when no redirects', () => {
|
||||
checkRedirect(
|
||||
[{path: 'a', component: ComponentA, children: [{path: 'b', component: ComponentB}]}],
|
||||
|
|
|
@ -339,6 +339,39 @@ describe('recognize', () => {
|
|||
});
|
||||
});
|
||||
|
||||
it('should match (non-termianl) when both primary and secondary and primary has a child',
|
||||
() => {
|
||||
const config = [{
|
||||
path: 'parent',
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
component: ComponentA,
|
||||
children: [
|
||||
{path: 'b', component: ComponentB},
|
||||
{path: 'c', component: ComponentC},
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '',
|
||||
component: ComponentD,
|
||||
outlet: 'secondary',
|
||||
}
|
||||
]
|
||||
}];
|
||||
|
||||
checkRecognize(config, 'parent/b', (s: RouterStateSnapshot) => {
|
||||
checkActivatedRoute(s.root, '', {}, RootComponent);
|
||||
checkActivatedRoute(s.firstChild(s.root), 'parent', {}, undefined);
|
||||
|
||||
const cc = s.children(s.firstChild(s.root));
|
||||
checkActivatedRoute(cc[0], '', {}, ComponentA);
|
||||
checkActivatedRoute(cc[1], '', {}, ComponentD, 'secondary');
|
||||
|
||||
checkActivatedRoute(s.firstChild(cc[0]), 'b', {}, ComponentB);
|
||||
});
|
||||
});
|
||||
|
||||
it('should match (terminal)', () => {
|
||||
checkRecognize(
|
||||
[{
|
||||
|
|
Loading…
Reference in New Issue