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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Angular 中,导航栏可以作为一个抽象路由来实现。抽象路由是指在路由配置中定义的一种特殊路由,它不会对应一个具体的组件或页面,而是用于组织和管理其他路由。 以下是如何将导航栏作为抽象路由的步骤: 1. 创建导航栏组件:首先,创建一个导航栏组件,用于显示导航菜单和处理导航逻辑。这个组件不需要对应一个具体的路由路径,因为它将作为抽象路由使用。 2. 定义抽象路由:在路由配置文件中,定义一个抽象路由,例如`{ path: '', component: NavbarComponent, outlet: 'navbar' }`。这里使用一个特殊的`outlet`属性来指定抽象路由的出口名称为`navbar`,以便在其他路由中插入导航栏。 3. 插入导航栏:在其他具体路由的模板中,使用`<router-outlet>`元素来指定插入抽象路由的位置。例如,可以在主模板中添加`<router-outlet name="navbar"></router-outlet>`,这样导航栏就会被插入到主模板的指定位置。 通过以上步骤,导航栏就作为一个抽象路由被集成到应用中了。它可以在不同的页面中显示,并且可以处理导航逻辑。 使用抽象路由的好处是,可以将导航栏与其他具体路由组件解耦,使其独立于具体的页面。这样可以更容易地扩展和维护导航栏功能,同时保持代码的整洁和可读性。 希望以上解答对你有帮助,如果还有其他问题,请随时提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值