Skip to content

Commit

Permalink
fix(module:breadcrumb): fix breadcrumb when Routes path='' (#4966)
Browse files Browse the repository at this point in the history
* fix(module:breadcrumb): fix breadcrumb when Routes path=''

* fix(module:breadcrumb): fix breadcrumb when Routes path=''

* fix(module:breadcrumb): fix breadcrumb when Routes path=''

* fix(module:breadcrumb): fix breadcrumb when Routes path=''
  • Loading branch information
nuonuoge authored May 6, 2020
1 parent 93676c9 commit 5ffa45c
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 6 deletions.
5 changes: 4 additions & 1 deletion components/breadcrumb/breadcrumb.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,10 @@ export class NzBreadCrumbComponent implements OnInit, OnDestroy {
if (child.outlet === PRIMARY_OUTLET) {
// Only parse components in primary router-outlet (in another word, router-outlet without a specific name).
// Parse this layer and generate a breadcrumb item.
const routeURL: string = child.snapshot.url.map(segment => segment.path).join('/');
const routeURL: string = child.snapshot.url
.map(segment => segment.path)
.filter(path => path)
.join('/');
const nextUrl = url + `/${routeURL}`;
const breadcrumbLabel = child.snapshot.data[this.nzRouteLabel];
// If have data, go to generate a breadcrumb for it.
Expand Down
53 changes: 48 additions & 5 deletions components/breadcrumb/breadcrumb.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,12 @@ describe('breadcrumb', () => {
router.navigate(['one']);
flushFixture(fixture);
expect(breadcrumb.componentInstance.breadcrumbs.length).toBe(0);

router.navigate(['/']);
flushFixture(fixture);
router.navigate([{ outlets: { nonPrimary: ['one', 'two'] } }]);
flushFixture(fixture);
expect(router.url).toBe('/(nonPrimary:one/two)');
});
}));

Expand Down Expand Up @@ -164,6 +170,31 @@ describe('breadcrumb', () => {
});
}));

it('should route data breadcrumb navigate work', fakeAsync(() => {
TestBed.configureTestingModule({
imports: [CommonModule, NzBreadCrumbModule, RouterTestingModule.withRoutes(customRouteLabelRoutes)],
declarations: [NzBreadcrumbRouteLabelDemoComponent, NzBreadcrumbNullComponent]
}).compileComponents();

fixture = TestBed.createComponent(NzBreadcrumbRouteLabelDemoComponent);
breadcrumb = fixture.debugElement.query(By.directive(NzBreadCrumbComponent));

fixture.ngZone!.run(() => {
router = TestBed.get(Router);
router.initialNavigation();

flushFixture(fixture);
expect(breadcrumb.componentInstance.nzRouteLabel).toBe('customBreadcrumb');

router.navigate(['one', 'two', 'three', 'four']);
flushFixture(fixture);

fixture.debugElement.query(By.css('a')).nativeElement.click();
flushFixture(fixture);
expect(router.url).toBe('/one/two');
});
}));

it('should raise error when RouterModule is not included', fakeAsync(() => {
TestBed.configureTestingModule({
imports: [NzBreadCrumbModule],
Expand All @@ -190,7 +221,7 @@ function flushFixture(fixture: ComponentFixture<any>): void {
template: `
<nz-breadcrumb [nzAutoGenerate]="true"></nz-breadcrumb>
<router-outlet></router-outlet>
<router-outlet name="non-primary"></router-outlet>
<router-outlet name="nonPrimary"></router-outlet>
`
})
class NzBreadcrumbAutoGenerateDemoComponent {}
Expand Down Expand Up @@ -245,12 +276,24 @@ const routes: Routes = [
]
}
]
},
// Should only work for the primary outlet.
}
]
},
// Should only work for the primary outlet.
{
path: 'one',
outlet: 'nonPrimary',
component: NzBreadcrumbAutoGenerateDemoComponent,
data: {
breadcrumb: ''
},
children: [
{
path: 'two',
outlet: 'notprimary',
component: NzBreadcrumbNullComponent
component: NzBreadcrumbNullComponent,
data: {
breadcrumb: 'Layer 2'
}
}
]
}
Expand Down

0 comments on commit 5ffa45c

Please sign in to comment.