Втомилися від "курсів без реальної практики"? Ми вивели ідеальну формулу 🔥, що дійсно працює — "Три кроки до розробника".
Дізнатися більше
12.05.2025
3 хвилин читання

Посібник зі створення багаторівневої навігації в Angular

Angular – це потужний інструмент для розроблення Front End-додатків, що дає змогу створювати складні проєкти, які масштабуються. Однак його багаті можливості іноді вимагають вдумливого підходу. Якщо ти коли-небудь намагався реалізувати багаторівневу навігацію, то знаєш, що це не просто “взяв і зробив”.

У цій статті ми детально розберемо, як крок за кроком налаштувати таку річ як Angular маршрутизація, і додати хлібні крихти (breadcrumbs) для зручності користувачів. А якщо ти хочеш ще більш детально розібратися у Front End-розробці, записуйся на курси програмування FoxmindEd.

🚀 Менторинг з Front End від FoxmindEd! 🚀 Працюйте над реальними завданнями, отримуйте досвід і ставайте експертом в Angular разом з FoxmindEd! 💡
Дізнатись більше

Що таке багаторівнева навігація?

Уяви собі застосунок, у якому ти переходиш від головної сторінки до деталей продукту через кілька категорій. Це і є приклад багаторівневої навігації. Вона потрібна для:

  • Чіткого структурування маршрутів.
  • Зручного інтерфейсу для користувачів.
  • Логічного поділу коду, щоб ти не потонув у своєму проєкті за кілька тижнів.

В Angular вся магія крутиться навколо Angular Router. Цей модуль дає змогу задавати маршрути, пов’язувати їх із компонентами та налаштовувати логіку переходів. Давай розберемося, як це працює.

Крок 1: Налаштування маршрутів

Спочатку створимо базову структуру маршрутів. Для цього потрібно у файлі app-routing.module.ts описати основні маршрути:

import { NgModule } from '@angular/core';

import { RouterModule, Routes } from '@angular/router';

import { HomeComponent } from './home/home.component';

import { CategoryComponent } from './category/category.component';

import { ProductComponent } from './product/product.component';

const routes: Routes = [

  { path: '', component: HomeComponent },

  { 

    path: 'category/:id', 

    component: CategoryComponent, 

    children: [

      { path: 'product/:productId', component: ProductComponent },

    ]

  },

];

@NgModule({

  imports: [RouterModule.forRoot(routes)],

  exports: [RouterModule]

})

export class AppRoutingModule { }

Що ми тут зробили? Ми налаштували маршрут для категорії з вкладеними маршрутами для продуктів. Це дає змогу відображати компонент ProductComponent всередині CategoryComponent.

Крок 2: Створення хлібних крихт (breadcrumbs)

Тепер додамо Angular breadcrumbs, щоб користувач міг бачити, де він перебуває. Це особливо актуально для додатків із глибокими рівнями вкладеності. Для цього створимо сервіс:

import { Injectable } from '@angular/core';

import { ActivatedRouteSnapshot, Router } from '@angular/router';

@Injectable({

  providedIn: 'root',

})

export class BreadcrumbService {

  getBreadcrumbs(route: ActivatedRouteSnapshot, url: string = '', breadcrumbs: Array<any> = []): Array<any> {

    const children = route.children;

    if (children.length === 0) {

      return breadcrumbs;

    }

    for (const child of children) {

      const routeURL = child.url.map(segment => segment.path).join('/');

      if (routeURL !== '') {

        url += `/${routeURL}`;

      }

      breadcrumbs.push({

        label: child.data['breadcrumb'],

        url: url

      });

      return this.getBreadcrumbs(child, url, breadcrumbs);

    }

    return breadcrumbs;

  }

}

Цей сервіс дає змогу генерувати список крихт на основі поточного маршруту. Тепер додамо дані маршруту в app-routing.module.ts:

const routes: Routes = [

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

  { 

    path: 'category/:id', 

    component: CategoryComponent, 

    data: { breadcrumb: 'Category' },

    children: [

      { 

        path: 'product/:productId', 

        component: ProductComponent, 

        data: { breadcrumb: 'Product' }

      },

    ]

  },

];

Крок 3: Динамічне оновлення навігації

Щоб хлібні крихти динамічно оновлювалися, впровадь сервіс у головний компонент:

import { Component, OnInit } from '@angular/core';

import { Router, ActivatedRoute } from '@angular/router';

import { BreadcrumbService } from './breadcrumb.service';

@Component({

  selector: 'app-root',

  template: `

    <nav>

      <ng-container *ngFor="let breadcrumb of breadcrumbs">

        <a [routerLink]="breadcrumb.url">{{ breadcrumb.label }}</a>

        <span *ngIf="breadcrumb !== breadcrumbs[breadcrumbs.length - 1]"> / </span>

      </ng-container>

    </nav>

    <router-outlet></router-outlet>

  `,

})

export class AppComponent implements OnInit {

  breadcrumbs: Array<any> = [];

  constructor(private breadcrumbService: BreadcrumbService, private router: Router, private route: ActivatedRoute) {}

  ngOnInit() {

    this.router.events.subscribe(() => {

      this.breadcrumbs = this.breadcrumbService.getBreadcrumbs(this.route.root);

    });

  }

}

Тепер під час навігації користувачеві відображатимуться актуальні хлібні крихти.

Підпишіться на наш Ютуб-канал! Корисні відео для програмістів чекають на вас! YouTube
Оберіть свій курс програмування! Шлях до кар’єри програміста починається тут! Подивитись

Крок 4: Поліпшення UX за допомогою lazy loading

Багаторівнева навігація може бути важкою для продуктивності, особливо якщо ти вантажиш усі модулі одразу. Використовуй ліниве завантаження (lazy loading):

const routes: Routes = [

  { path: '', component: HomeComponent },

  { 

    path: 'category/:id', 

    loadChildren: () => import('./category/category.module').then(m => m.CategoryModule),

  },

];

Так Angular буде довантажувати модуль тільки тоді, коли він реально потрібен.

Висновок

Angular navigation може здатися складною на початку, але щойно ти розберешся в її принципах, налаштування маршрутів стане таким самим простим і логічним, як рефакторинг невеликого модуля наприкінці робочого дня. Пам’ятай, що грамотно організована структура маршрутів спрощує життя не тільки користувачам, а й самим розробникам, даючи змогу підтримувати код чистим і масштабованим.

FAQ
Що таке багаторівнева навігація в Angular?

Це структура маршрутів, у якій один маршрут містить вкладені маршрути, наприклад: Головна → Категорія → Продукт.

Навіщо використовувати хлібні крихти (breadcrumbs)?

Вони допомагають користувачеві зрозуміти, де він перебуває, і швидко повернутися на попередні рівні.

Як задати маршрути в Angular?

За допомогою RouterModule.forRoot() у файлі app-routing.module.ts, описавши шляхи та відповідні компоненти.

Де задаються підписи для хлібних крихт?

У параметрі data маршрутів, наприклад: data: { breadcrumb: 'Product' }.

Як оновлюються хлібні крихти під час переходів?

Сервіс BreadcrumbService відстежує поточний маршрут і оновлює список крихт у компоненті.

Що таке lazy loading і навіщо він потрібен?

Це відкладене завантаження модулів, що дає змогу прискорити початкове завантаження програми та підвищити продуктивність.

Хочете дізнатися більше про створення багаторівневої навігації в Angular? Задайте своє питання в коментарях нижче! 🤔👇

Додати коментар

Ваш імейл не буде опубліковано. Обов'язкові поля відзначені *

Зберегти моє ім'я, імейл та адресу сайту у цьому браузері для майбутніх коментарів