参考demo:https://plnkr.co/edit/UOcylJ5noqfRCL7ULJeJ?p=preview。
1.html文件--基于NG-ZORRO框架
<
nz-breadcrumb
>
<
nz-breadcrumb-item
>
<
a
>主页
</
a
>
</
nz-breadcrumb-item
>
<
nz-breadcrumb-item *
ngFor=
"let breadcrumb of breadcrumbs"
>
<
a [
routerLink]=
"[breadcrumb.url,breadcrumb.params]"
>{{breadcrumb.label}}
</
a
>
</
nz-breadcrumb-item
>
</
nz-breadcrumb
>
2.逻辑代码
import {
Component,
OnInit,
Input }
from
'@angular/core';
import {
ActivatedRoute,
Router,
ParamMap,
Params,
NavigationEnd,
PRIMARY_OUTLET }
from
'@angular/router';
import {
Observable }
from
'rxjs/Observable';
import
'rxjs/add/operator/filter';
interface
IBreadcrumb {
label:
string;
params?:
Params;
url:
string;
}
@
Component({
selector:
'app-breadcrumb',
templateUrl:
'./breadcrumb.component.html',
styleUrls: [
'./breadcrumb.component.css']
})
export
class
BreadcrumbComponent
implements
OnInit {
breadcrumbs:
IBreadcrumb[];
constructor(
public
activatedRoute:
ActivatedRoute,
private
router:
Router
) {
this.
breadcrumbs = [];
}
ngOnInit() {
// const ROUTE_DATA_BREADCRUMB = 'breadcrumb';
const
ROUTE_DATA_BREADCRUMB =
'title';
this.
router.
events.
filter(
event
=>
event
instanceof
NavigationEnd).
subscribe(
event
=> {
let
root:
ActivatedRoute =
this.
activatedRoute.
root;
this.
breadcrumbs =
this.
getBreadcrumbs(
root);
});
}
private
getBreadcrumbs(
route:
ActivatedRoute,
url:
string =
'',
breadcrumbs:
IBreadcrumb[] = []):
IBreadcrumb[] {
const
ROUTE_DATA_BREADCRUMB =
'title';
// 获取子路由
let
children:
ActivatedRoute[] =
route.
children;
// 如果没有子路由
if (
children.
length ===
0) {
return
breadcrumbs;
}
// 循环每个子路由
for (
let
child
of
children) {
// verify primary route
if (
child.
outlet !==
PRIMARY_OUTLET) {
continue;
}
// verify the custom data property "breadcrumb" is specified on the route
if (!
child.
snapshot.
data.
hasOwnProperty(
ROUTE_DATA_BREADCRUMB)) {
return
this.
getBreadcrumbs(
child,
url,
breadcrumbs);
}
// get the route's URL segment
let
routeURL:
string =
child.
snapshot.
url.
map(
segment
=>
segment.
path).
join(
'/');
// append route URL to URL
url +=
`/
${
routeURL
}
`;
// add breadcrumb
let
breadcrumb:
IBreadcrumb = {
label:
child.
snapshot.
data[
ROUTE_DATA_BREADCRUMB],
params:
child.
snapshot.
params,
url:
url
};
breadcrumbs.
push(
breadcrumb);
// recursive
return
this.
getBreadcrumbs(
child,
url,
breadcrumbs);
}
// we should never get here, but just in case
return
breadcrumbs;
}
}