Angular 面包屑导航

本文介绍了一个基于 Angular 和 NG-ZORRO 框架实现动态面包屑导航的方法,通过监听路由变化来更新面包屑组件显示的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考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、付费专栏及课程。

余额充值