Angular 面包屑导航

参考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;
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值