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

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

5 min read Angular Обновлено 20 Dec 2025
Маршрутизация Angular: страницы и навигация
Маршрутизация Angular: страницы и навигация

Кратко: В этой статье показано, как создать несколько страниц в приложении Angular и настроить навигацию между ними с помощью модуля маршрутизации, ссылок в HTML и вызовов router.navigate() из TypeScript. Приведены пошаговые команды, пример структуры файлов, шаблоны и проверочные списки для разработки и приёма.

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

Введение

Если вы создаёте приложение на Angular с несколькими страницами, нужно настроить маршрутизацию (routing). Маршрутизация определяет, какой компонент рендерится при переходе по определённому пути URL. В этой статье показано, как:

  • создать компоненты для страниц;
  • зарегистрировать маршруты в модуле маршрутизации;
  • отображать компонент через ;
  • навигировать через HTML-ссылки и через TypeScript (router.navigate());
  • добавить стили и проверить работу локально.

Краткое определение: Router — сервис Angular, который управляет навигацией между компонентами по маршрутам.

Что вам потребуется

  • Node.js и npm установленными на машине;
  • Angular CLI (ng);
  • базовое приложение Angular (можно создать ng new my-app).

Важно: шаги сохранены в порядке, удобном для разработчика. Кодовые фрагменты можно копировать напрямую в соответствующие файлы проекта.

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

План действий:

  1. Создайте приложение Angular или откройте существующее.
  2. В терминале выполните команду генерации компонента. Например, для страницы Home:
ng generate component home
  1. Откройте файл компонента шаблона src/app/home/home.component.html и замените содержимое на следующий HTML:

Home

I am a photographer that does wedding photography. Check out my projects!

John & Amy

Blue Mountains, Australia

Ross & Rach

Hunter Valley Gardens, Australia

  1. Добавьте стили в src/app/home/home.component.css:
.content {
  line-height: 2rem;
  font-size: 1.2em;
}

.card {
  box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
  width: 400px;
  padding: 16px;
  margin: 24px 0px;
  background-color: whitesmoke;
  font-family: sans-serif;
}
  1. Генерируем второй компонент для страницы «About»:
ng generate component about
  1. Замените шаблон src/app/about/about.component.html на:

About Me

I'm John, and I love taking photos. I have been taking photos for over 25 years. Visit me on my social media:

Facebook LinkedIn Instagram
  1. Стили для About:
.content {
  line-height: 2rem;
  font-size: 1.2em;
}

Важно: текст внутри компонентов можно локализовать на русский язык, если целевая аудитория русскоязычная.

2. Как настроить маршрутизацию приложения

Мы будем использовать один файл маршрутов для всего приложения: src/app/app-routing.module.ts.

  1. Если у вас нет модуля маршрутизации, создайте его командой:
ng generate module app-routing --module app --flat
  1. В результате в src/app появится файл app-routing.module.ts.

Структура файлов Angular с файлом маршрутизации

  1. В начале файла добавьте необходимые импорты. Убедитесь, что вы импортировали CommonModule, RouterModule и компоненты:
import { CommonModule } from '@angular/common';
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { AboutComponent } from './about/about.component';
  1. Опишите массив маршрутов:
const routes: Routes = [
  { path: '', component: HomeComponent },
  { path: 'about', component: AboutComponent }
];
  1. Зарегистрируйте маршруты в NgModule:
@NgModule({
  declarations: [],
  imports: [
    CommonModule,
    RouterModule.forRoot(routes)
  ],
  exports: [RouterModule]
})
export class AppRoutingModule { }
  1. В корневом шаблоне приложения src/app/app.component.html замените содержимое на контейнер с :

— это плейсхолдер, куда Angular будет рендерить компоненты согласно маршрутам.

3. Навигация через ссылки в HTML

Чтобы создать навигацию через HTML, используйте обычные теги с атрибутом href, где путь совпадает с путём в массиве маршрутов.

  1. Вставьте навигационную панель в src/app/app.component.html перед контейнером:
  1. Добавьте стили в 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;
}
  1. В файл глобальных стилей src/styles.css можно добавить сброс отступов:
body {
  margin: 0;
  padding: 0;
}
  1. Запустите приложение в терминале из корня проекта:
ng serve
  1. Откройте в браузере URL http://localhost:4200/. Приложение загрузится на страницу Home.

Домашняя страница Angular с контентом

  1. Перейдите на страницу About по ссылке в навбаре.

Приложение Angular показывает страницу About

Примечание: для корректной работы ссылок используйте абсолютные или относительные пути в зависимости от конфигурации базового href в index.html.

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

Иногда нужно управлять навигацией программно. Для этого используют Router из @angular/router и метод navigate().

  1. Замените ссылки на кнопки в src/app/app.component.html:

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

Приложение Angular показывает домашнюю страницу

Приложение Angular показывает страницу About

Совет: для навигации с передачей параметров используйте this.router.navigate(['/path', id]) или navigateByUrl() при необходимости.

5. Создание множества страниц и архитектурные подсказки

Если ваше приложение содержит много страниц, придерживайтесь таких практик:

  • Разбейте маршруты по модулям (feature modules) и используйте ленивую загрузку (lazy loading) для крупных разделов.
  • Для маршрутов с параметрами используйте синтаксис path: 'product/:id' и получайте параметры через ActivatedRoute.
  • Централизуйте маршруты в отдельных файлах для удобства тестирования и рефакторинга.
  • Используйте защитники маршрутов (guards) для авторизации и проверки доступа.

Когда маршрутизация может подвести

  • Сервер не настроен на отдачу index.html для всех путей (нужно настроить fallback), тогда при обновлении страницы на нестандартном пути может выдаваться 404.
  • Если базовый href в index.html задан неверно, пути будут рассчитаны неверно.
  • Привязка href напрямую к сторонним ссылкам может вывести пользователя из приложения.

Дополнительные материалы и ускорители разработки

Ниже — полезные чеклисты, критерии приёмки и пример решения в виде decision tree.

Чеклист разработчика

Чеклист ревьюера

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

Небольшая методология внедрения (мини-SOP)

  1. Сгенерировать компоненты.
  2. Добавить и протестировать локально маршруты в app-routing.module.ts.
  3. Интегрировать и проверить рендеринг.
  4. Добавить навигационные элементы (ссылки/кнопки).
  5. Добавить guards, lazy-loading, и тесты по необходимости.
  6. Прописать корректный base href и наладить серверный фолбэк для SPA.

Decision tree маршрутизации (Mermaid)

Краткий набор сниппетов (cheat sheet)

1-строчный глоссарий

Заключение

Маршрутизация — базовая часть любого SPA на Angular. Правильная настройка маршрутов, использование , навигация через ссылки и программно через router.navigate() позволяют построить предсказуемую навигацию между страницами. Для больших приложений стоит внедрять ленивую загрузку и guards, а также тестировать поведение при прямом вводе URL в адресную строке.

В следующих шагах вы можете расширить этот пример: добавить параметры маршрута, дочерние маршруты, защиту маршрутов и lazy loading для модулей.

Важные замечания

Автор
Редакция

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

Добавить элементы Пункта управления в строку меню Mac
macOS

Добавить элементы Пункта управления в строку меню Mac

Живёте в минусе? План действий и инструменты
Финансы

Живёте в минусе? План действий и инструменты

Konsole: настройка терминала KDE
Linux

Konsole: настройка терминала KDE

Duolingo Math — обзор и руководство
Образование

Duolingo Math — обзор и руководство

Chrome не предлагает сохранить пароли — что делать
Техподдержка

Chrome не предлагает сохранить пароли — что делать

Как пользоваться OneNote — быстрый практичный гид
Продуктивность

Как пользоваться OneNote — быстрый практичный гид