Гид по технологиям

Маршрутизация в Angular: создание и навигация между страницами

5 min read Angular Обновлено 28 Mar 2026
Маршрутизация в Angular: создание страниц и навигация
Маршрутизация в Angular: создание страниц и навигация

TL;DR

Кратко: в Angular добавьте маршруты в модуль маршрутизации, создайте компоненты для каждой страницы и используйте либо routerLink / href в шаблоне, либо Router.navigate() в TypeScript для переходов. Рекомендуется использовать RouterModule.forRoot(routes), продумать структуру путей и учитывать lazy loading и guards для масштабируемых приложений.

Ноутбук с кодом на экране и книгами на столе

Если вы создаёте Angular-приложение с несколькими страницами, вам нужна маршрутизация, чтобы переходить между ними. Обычно это делается через список маршрутов (routes) в модуле маршрутизации, где каждому пути назначается компонент.

Навигация в шаблоне HTML может осуществляться через якорные ссылки () или директиву routerLink, а в TypeScript — через Router.navigate(). Ниже — подробное руководство, расширенные советы и проверочные списки.

Что такое маршрут в Angular

Маршрут — это запись, которая связывает путь URL с конкретным компонентом. Одно предложение: маршрут определяет, какой компонент показывать при определённом URL.

Как создать новую страницу (компонент) в Angular

  1. Создайте новое приложение Angular или откройте существующее.

  2. Сгенерируйте компонент через CLI:

  1. Откройте файл src/app/home/home.component.html и замените содержимое на нужное. Ниже пример локализованного содержимого компонента «Главная» (Home):
  1. Добавьте стили для компонента src/app/home/home.component.css:
  1. Сгенерируйте второй компонент, например для «О себе» (About):
  1. Откройте src/app/about/about.component.html и замените содержимое (пример):
  1. Добавьте стили для src/app/about/about.component.css:
.content {  
  line-height: 2rem;  
  font-size: 1.2em;  
}

Important: видимый текст в компонентах (заголовки, подписи) можно локализовать, но пути маршрутов (например, ‘about’) оставьте консистентными и понятными для приложения.

Как настроить маршрутизацию (app-routing.module.ts)

Если модуля маршрутизации ещё нет, создайте его:

ng generate module app-routing --module app --flat

Это создаст файл src/app/app-routing.module.ts. Структура файлов Angular с файлом маршрутизации

Вверху файла добавьте нужные импорты:

import { CommonModule } from '@angular/common';  
import { Routes, RouterModule } from '@angular/router';  
import { HomeComponent } from './home/home.component';  
import { AboutComponent } from './about/about.component';

Создайте массив маршрутов:

const routes: Routes = [  
  { path: '', component: HomeComponent },  
  { path: 'about', component: AboutComponent }  
];

И экспортируйте RouterModule в NgModule:

@NgModule({  
  declarations: [],  
  imports: [  
    CommonModule,  
    RouterModule.forRoot(routes)  
  ],  
  exports: [RouterModule]  
})

В корневом шаблоне src/app/app.component.html замените содержимое на контейнер с точкой вставки маршрутов:

Навигация между страницами в шаблоне (HTML)

Чтобы перейти на страницу из HTML, используйте ссылку с путём маршрута. Два распространённых варианта:

  • plain href (браузерный переход) — работает, но может перезагружать страницу;
  • директива Angular routerLink — предпочтительна, сохраняет состояние SPA и history API.

Примеры:

Стили src/app/app.component.css (пример):

.container {  
  margin: 48px 35%;  
  font-family: "Arial", sans-serif;  
  display: flex;  
  flex-direction: column;  
  align-items: center;  
}  
  
.navbar {  
  background-color: darkslategray;  
  padding: 30px 50px;  
  display: flex;  
  align-items: center;  
  font-family: sans-serif;  
}  
  
.link:first-of-type {  
  margin-right: 32px;  
}  
  
.link {  
  color: white;  
  text-decoration: none;  
  font-size: 14pt;  
  font-weight: bold;  
}

Добавьте глобальные стили src/styles.css:

body {  
  margin: 0;  
  padding: 0;  
}

Запустите приложение:

ng serve

Откройте в браузере http://localhost:4200/. По умолчанию загрузится компонент Home. Главная страница Angular с контентом

Нажмите на ссылку «О себе», чтобы перейти на страницу About. Angular-приложение показывает страницу About

Навигация из TypeScript: Router.navigate()

Если нужно инициировать переход программно (например, по клику кнопки), используйте Router.navigate():

  1. В шаблоне замените ссылки на кнопки и вызовите функцию по нажатию:
  
  1. Стили для кнопок (src/app/app.component.css):
button {  
  background-color: black;  
  padding: 4px 8px;  
  cursor: pointer;  
}
  1. Импортируйте Router в src/app/app.component.ts:
import { Router } from '@angular/router';
  1. Внедрите Router через конструктор:
constructor(private router: Router) {  
}
  1. Добавьте функцию навигации:
clickButton(path: string) {  
    this.router.navigate([path]);  
}
  1. Перезапустите ng serve, откройте приложение и проверьте переходы. Angular: страница Home

Нажав «О себе», вы попадёте на страницу About. Angular: страница About

Полезные практики и альтернативные подходы

  • Используйте routerLink в шаблонах вместо обычного href для избежания полной перезагрузки страницы.
  • Для больших приложений применяйте lazy loading (ленивая загрузка модулей) — уменьшает время первого рендера.
  • При вложенной структуре страниц применяйте child routes (дочерние маршруты).
  • Для защиты маршрутов используйте guards (CanActivate, CanDeactivate).
  • Настройте базовый тег в index.html, чтобы корректно работала навигация.
  • Рассмотрите стратегию хеш-роутинга (HashLocationStrategy) если сервер не настроен на fallback для SPA.

Пример использования lazy loading (в routes):

const routes: Routes = [  
  { path: '', component: HomeComponent },  
  { path: 'about', loadChildren: () => import('./about/about.module').then(m => m.AboutModule) }  
];

Когда lazy loading не подходит: простые одностраничные приложения с малым количеством компонентов — иногда достаточно простых статических модулей без ленивой загрузки.

Частые ошибки и как их исправить (counterexamples)

  • Проблема: при переходе по ссылке 404 от сервера. Причина: сервер не настроен на отдачу index.html для всех путей. Решение: настроить fallback на стороне сервера (например, Nginx, Apache) или использовать HashLocationStrategy.

  • Проблема: routerLink не работает. Причина: вы не импортировали RouterModule в модуль или забыли добавить . Решение: проверить импорты и наличие .

  • Проблема: путь не совпадает (навигация не срабатывает). Причина: путевой параметр или слэш не соответствует. Решение: проверьте, используется ли абсолютный или относительный путь и корректность base href.

Контроль качества: тест-кейсы и критерии приёмки

Критерии приёмки:

  • При старте приложения открывается компонент Home (путь ‘’).
  • Клик по ссылке/кнопке «О себе» открывает компонент About без перезагрузки страницы (при использовании routerLink).
  • При ручном вводе URL /about приложение корректно рендерит компонент About.
  • Guard блокирует доступ к маршруту при отсутствии прав (если предусмотрено).

Минимальные тест-кейсы:

  1. ng serve -> открыть / -> ожидать содержимое Home.
  2. Нажать routerLink /about -> ожидать содержимое About, сохранение истории (кнопка назад работает).
  3. Ввести URL /about в адресной строке -> ожидать содержимое About.

Роли и чек-листы (developer / reviewer)

Developer:

  • Сгенерировать компоненты (home, about).
  • Добавить маршруты в app-routing.module.ts.
  • Добавить в app.component.html.
  • Использовать routerLink для внутренних переходов.
  • Реализовать lazy loading, если необходимо.

Reviewer:

  • Проверить отсутствие полных перезагрузок при переходах.
  • Проверить корректность base href и серверного fallback.
  • Проверить покрытие тестами критичных маршрутов.

Ментальные модели и эвристики

  • Малое приложение = простая маршрутизация в одном модуле.
  • Рост приложения = разделение по фичам + lazy loading.
  • Безопасность и права = guards + централизованная логика аутентификации.

Быстрый чек-лист при деплое

  • Убедитесь, что сервер возвращает index.html на все пути (SPA fallback).
  • Проверьте корректность production build (ng build --prod).
  • Проверить работу маршрутов после деплоя по прямым ссылкам.

Decision flow (простая диаграмма принятия решения)

flowchart TD
  A[Нужны ли отдельные страницы?] -->|Да| B{Много страниц?}
  B -->|Нет| C[Использовать простой routing]
  B -->|Да| D{Нужна ли оптимизация загрузки?}
  D -->|Да| E[Применить lazy loading]
  D -->|Нет| C
  A -->|Нет| F[Оставить одну страницу]

Безопасность и приватность

  • Не храните секреты в маршрутах (в URL). Используйте состояние/сервисы для передачи чувствительных данных.
  • Если маршрут содержит параметры, валидируйте их и экранируйте перед выводом.

Краткое резюме

Маршрутизация в Angular — гибкий инструмент для организации навигации в SPA. Начните с простых routes и RouterModule.forRoot(routes), используйте routerLink и Router.navigate() по назначению, внедряйте lazy loading и guards по мере роста приложения.

Сводка ключевых действий

  • Сгенерировать компоненты: ng generate component ....
  • Создать app-routing.module.ts и объявить routes.
  • Использовать в базовом шаблоне.
  • Навигировать через routerLink или Router.navigate().

Спасибо — теперь вы можете настроить маршрутизацию и масштабировать её по мере роста приложения.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как извлечь неодимовые магниты из HDD
Сделай сам

Как извлечь неодимовые магниты из HDD

Сигнализация на HomePod через HomeKit — DIY инструкция
Smart Home

Сигнализация на HomePod через HomeKit — DIY инструкция

Android Studio на macOS — установка и запуск
Разработка

Android Studio на macOS — установка и запуск

Отключить автозагрузку медиа в Telegram
How-to

Отключить автозагрузку медиа в Telegram

Личный бюджет в Excel: пошагово и с примерами
Финансы

Личный бюджет в Excel: пошагово и с примерами

Как создать расширение Google Chrome
Разработка

Как создать расширение Google Chrome