zoukankan      html  css  js  c++  java
  • 【angular5项目积累总结】breadcrumb面包屑组件

    view

     

    code

    <div class="fxs-breadcrumb-wrapper" aria-label="Navigation history">
        <div class="fxs-breadcrumb-dropmenu">
            <div class="fxs-dropmenu" role="presentation">
    
                <div class="fxs-dropmenu-content fxs-text-link fxs-popup fxs-portal-bg-txt-br fxs-dropmenu-defaultWidth fxs-dropmenu-right fxs-dropmenu-invisible">
                    <ul class="fxs-breadcrumb-overflow">
                    </ul>
                </div>
            </div>
        </div>
        <ng-container *ngFor="let breadcrumb of breadcrumbs; index as i">
            <div class="fxs-breadcrumb-divider fxs-trim-svg-secondary">
                <svg height="100%" width="100%" aria-hidden="true" role="presentation" focusable="false">
                    <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#FxSymbol0-011"></use>
                </svg>
            </div>
            <a [routerLink]="[breadcrumb.url, breadcrumb.params]" class="fxs-breadcrumb-crumb fxs-trim-text fxs-trim-hover">{{ breadcrumb.label }}</a>
        </ng-container>
    </div>
    import { Component, OnInit } from "@angular/core";
    import { Router, ActivatedRoute, NavigationEnd, Params, PRIMARY_OUTLET } from "@angular/router";
    import "rxjs/add/operator/filter";
    interface IBreadcrumb {
        label: string;
        params: Params;
        url: string;
    }
    
    @Component({
        selector: 'breadcrumb',
        templateUrl: './breadcrumb.component.html',
        host: {
            'class': 'fxs-breadcrumb'
        }
    })
    
    export class BreadcrumbComponent implements OnInit {
    
        public breadcrumbs: IBreadcrumb[];
    
    
        constructor(
            private activatedRoute: ActivatedRoute,
            private router: Router
        ) {
            this.breadcrumbs = [];
        }
    
    
        ngOnInit() {
            
            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[] = []): any {
            const ROUTE_DATA_BREADCRUMB: string = "breadcrumb";
    
            let children: ActivatedRoute[] = route.children;
    
            if (children.length === 0) {
                return breadcrumbs;
            }
    
            for (let child of children) {
    
                if (child.outlet !== PRIMARY_OUTLET) {
                    continue;
                }
    
    
                if (!child.snapshot.data.hasOwnProperty(ROUTE_DATA_BREADCRUMB)) {
                    return this.getBreadcrumbs(child, url, breadcrumbs);
                }
    
    
                let routeURL: string = child.snapshot.url.map(segment => segment.path).join("/");
    
                if (routeURL == "") {
                    return this.getBreadcrumbs(child, url, breadcrumbs);
                }
    
    
                url += `/${routeURL}`;
    
    
                let breadcrumb: IBreadcrumb = {
                    label: child.snapshot.data[ROUTE_DATA_BREADCRUMB],
                    params: child.snapshot.params,
                    url: url
                };
                breadcrumbs.push(breadcrumb);
    
    
                return this.getBreadcrumbs(child, url, breadcrumbs);
            }
        }
    
    }
  • 相关阅读:
    软件架构感悟.
    浏览器缓存技术
    as到底干嘛了???
    关于WebForm开发问题(给新手的建议)
    疑难问题ASP.NET
    破解hash算法.高手请进,求解.
    (MVC和JVPL模式)Moon.Web架构谈
    Moon.NET框架架构及介绍
    调用API设置安卓手机的Access Point
    gtShell 为你常用的目录建立标签并快速跳转
  • 原文地址:https://www.cnblogs.com/sybboy/p/8780325.html
Copyright © 2011-2022 走看看