Skip to content

Commit

Permalink
fix(router): handle when both primary and secondary are empty-path an…
Browse files Browse the repository at this point in the history
…d primary has a child
  • Loading branch information
vsavkin committed Jul 23, 2016
1 parent 06e4ca4 commit 2b63330
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 6 deletions.
2 changes: 1 addition & 1 deletion modules/@angular/router/src/apply_redirects.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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([], {});
}
}
Expand Down
2 changes: 1 addition & 1 deletion modules/@angular/router/src/directives/router_link.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)`.
*
Expand Down
4 changes: 1 addition & 3 deletions modules/@angular/router/src/recognize.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)),
Expand Down Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion modules/@angular/router/src/router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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> {
Expand Down
1 change: 1 addition & 0 deletions modules/@angular/router/test/apply_redirects.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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}]}],
Expand Down
33 changes: 33 additions & 0 deletions modules/@angular/router/test/recognize.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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(
[{
Expand Down

0 comments on commit 2b63330

Please sign in to comment.