【问题标题】:Angular Breadcrumb based on navigation history instead of route pathAngular Breadcrumb 基于导航历史而不是路由路径
【发布时间】:2019-06-21 06:21:36
【问题描述】:

有没有办法实现基于导航历史的面包屑,而不是基于普通路线路径的面包屑。

示例 路线 : 主页 - HChild1 - HChild1.1 主页 - HChild2 - HChild2.1

如果用户从主页导航到 HChild2.1 应该是 主页 | HChild2.1

而不是 主页 | HChild2 | HChild2.1

如果用户从 HChild2.1 导航到 HChild1.1,那么面包屑应该是 主页 | HChild2.1 | HChild1.1

而不是 主页 | HChild1.1 | HChild1.1

我所拥有的是基于普通路由路径的面包屑,它不能满足我的目的,因为我只能导航到 paranet 组件,而不能导航到前一个组件。

谢谢

【问题讨论】:

    标签: angular angular-ui-router angular-routing breadcrumbs


    【解决方案1】:

    使用面包屑组件填充导航结束路线中的最后一条路线。

    路线必须有面包屑数据

    //Home route
    { 
      path: '',
      component: HomeComponent,
      data: {breadcrumb:'Home'},
    }
    

    这是我制作的面包屑组件。

    export interface BreadCrumb {
      label: string;
      url: string;
    };
    
    @Component({
      selector: 'breadcrumb',
      template: `<span *ngFor="let breadcrumb of breadcrumbs" >
        <a [routerLink]="breadcrumb.url">
          {{ breadcrumb.label }}
        </a>|
      </span>`
    })
    export class BreadCrumbComponent {
      private history = [];
      breadcrumbs: BreadCrumb[] = [];
      constructor(
        private router: Router,
        private activatedRoute: ActivatedRoute,
      ) { }
    
      public ngOnInit(): void {
        this.router.events
          .pipe(filter(event => event instanceof NavigationEnd), distinctUntilChanged(),map(() => {
            return this.buildBreadCrumb(this.activatedRoute.root)
          }
          ))
          .subscribe(event => {
            this.breadcrumbs.push(event);
            console.log(this.breadcrumbs)
          });
      }
      buildBreadCrumb(route: ActivatedRoute, url: string = ''): BreadCrumb {
        const label = route.routeConfig ? route.routeConfig.data['breadcrumb'] : 'Home';
        const path = route.routeConfig ? `/${route.routeConfig.path}` : '';
    
        const nextUrl = `${url}${path}`;
        const breadcrumb = {
          label: label,
          url: nextUrl
        };
    
        if (route.firstChild) {
          return this.buildBreadCrumb(route.firstChild, nextUrl);
        }
        return breadcrumb;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 2020-09-06
      • 2017-05-05
      • 2017-09-09
      相关资源
      最近更新 更多