UNPKG

ngx-dynamic-breadcrumb

Version:
170 lines (129 loc) 3.97 kB
# Angular Dynamic Breadcrumb ## Installation **npm** ```shell npm install ngx-dynamic-breadcrumb ``` **yarn** ```shell yarn add ngx-dynamic-breadcrumb ``` ### Platform Version > For Angular version >= v12 ```shell npm install ngx-dynamic-breadcrumb@latest ``` > For Angular version >= 9 & < 12 ```shell npm install ngx-dynamic-breadcrumb@1.x.x ``` ### 1. Import the `NgxBreadcrumbModule` Import `NgxBreadcrumbModule` in the `NgModule` of your application's root module. ```typescript import { BrowserModule } from "@angular/platform-browser"; import { NgModule } from "@angular/core"; import { NgxBreadcrumbModule } from "ngx-dynamic-breadcrumb"; @NgModule({ imports: [BrowserModule, NgxBreadcrumbModule.forRoot()], bootstrap: [AppComponent], }) export class AppModule {} ``` ### 2. Set breadcrumbs in `app.routes` ```typescript export const routes: Routes = [ {path: '', redirectTo: 'login', pathMatch: 'full'}, {path: 'login', ..., data: { breadcrumb: 'Login'}}, {path: 'profile', ..., data: { breadcrumb: {key: 'profile', label: 'Profile'}}}, {path: 'roles', ..., data: { breadcrumb: 'Roles'}}, {path: 'vendors', ..., data: {breadcrumb: {key: 'vendors', label: 'Vendors', tooltip: 'All Vendors'}}}, children: [ {path: ':org', ..., data: { breadcrumb: 'Repo List'}}, {path: ':repo', ..., data: { breadcrumb: 'Repo'}}, }], }, ]; ``` > Note: If breadcrumb is supplied as string, then the string value acts as `key` & `label` for that particular breadcrumb. ### 3. Add `<ngx-breadcrumb></ngx-breadcrumb>` tag in template of your application component. # Customization ## Template Customization ### You can BYO template using the breadcrumb's ng-template projection. ```typescript <ngx-breadcrumb [breadcrumbTemplate]="template" class="ngx-dynamic-breadcrumb"></ngx-breadcrumb> <!-- Content Projection --> <ng-template #template let-breadcrumb="breadcrumb" let-isLast="isLast let-breadcrumbs="breadcrumbArr"> <a href="typescript:void(0)" *ngIf="!isLast && breadcrumb.isClickable" (click)="navigateTo(breadcrumb.url)" title="{{breadcrumb.tooltip}}" > {{ breadcrumb.label }} </a> <span *ngIf="isLast || !breadcrumb.isClickable" [ngClass]="{'breadcrumb-item-last': isLast && breadcrumbs.length > 1}" title="{{breadcrumb.tooltip}}" > {{ breadcrumb.label }} </span> </ng-template> ``` ## Dynamic Breadcrumbs Use `NgxBreadcrumbService` to edit/replace the breadcrumb per route object dynamically #### 1. Edit/replace the breadcrumb ```typescript ngOnInit(): void { ... this.getServiceDetails(this.serviceId).subscribe(repoDetails => { ... this.breadcrumbService.editBreadcrumbs([{ key: 'keyToObject', newLabel: 'New Label', newUrl: 'New URL value (optional)', // Provide this option only when needs to update url. }]); }); ... } ``` ### 2. Restrict a particular breadcrumb to render onto the UI by providing `newLabel` as `null` value. ```typescript ngOnInit(): void { ... this.getServiceDetails(this.serviceId).subscribe(repoDetails => { ... this.breadcrumbService.editBreadcrumbs([{ key: 'keyToObject', newLabel: null, // this will remove breadcrumb from UI. }]); }); ... } ``` # Miscellaneous ## Subscribing to breadcrumb changes (optional) ```typescript constructor(private readonly breadcrumbService: NgxBreadcrumbService) {} ngOnInit(): void { ... this.breadcrumbService.breadcrumbChanges.subscribe((crumbs: IBreadcrumb[]) => { ... this.breadcrumbs = crumbs; ... }); ... } ``` ## Get current breadcrumbs ```typescript constructor(private readonly breadcrumbService: NgxBreadcrumbService) {} breadcrumbs: IBreadcrumb[] = []; ngOnInit(): void { ... this.breadcrumbs = this.breadcrumbService.getBreadcrumbs(); ... } ``` # License [MIT](/projects/ngx-breadcrumb/LICENSE)