Dev Study
← 解説「ルーティング — URLで画面を切り替える」に戻る

サンプルコードで身につける: ルーティング — URLで画面を切り替える

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1URLとコンポーネントの対応表を作る

ルーティングの出発点は、Routes型の配列に「このURLならこのコンポーネント」と書く対応表です。path: '' はトップページを意味します。まだ画面遷移のコードは1行もなく、対応表という宣言だけで構成されているのがポイントです。

import { Routes } from '@angular/router';
import { HomeComponent } from './home.component';
import { ContactComponent } from './contact.component';

// 「このURLならこのコンポーネント」という対応表
export const routes: Routes = [
  { path: '', component: HomeComponent }, // トップページ
  { path: 'contact', component: ContactComponent }, // /contact
];

2ルートを登録して表示場所を決める

定義した対応表は、アプリ起動時に provideRouter(routes) で登録して初めて働きます。URLに対応するコンポーネントは <router-outlet /> を置いた場所に表示されます。「定義」「登録」「表示場所」という3点セットがそろってルーティングが動き出す、という全体像を示す例です。

import { bootstrapApplication } from '@angular/platform-browser';
import { provideRouter } from '@angular/router';
import { AppComponent } from './app.component';
import { routes } from './app.routes';

// アプリ起動時にルート定義を登録する
bootstrapApplication(AppComponent, {
  providers: [provideRouter(routes)],
});

// AppComponent のテンプレートに <router-outlet /> を置くと、
// URLに対応するコンポーネントがそこに表示される

3routerLink でページを移動する

ナビゲーションのリンクは href ではなく routerLink で書き、RouterLink と RouterOutlet を imports に登録します。routerLink ならページ全体を再読み込みせず、表示部分だけが切り替わります。ヘッダーのグローバルナビはアプリの骨格としてほぼ必ずこの形になります。

import { Component } from '@angular/core';
import { RouterLink, RouterOutlet } from '@angular/router';

@Component({
  selector: 'app-root',
  imports: [RouterLink, RouterOutlet],
  // href ではなく routerLink。再読み込みなしで切り替わる
  template:
    '<nav>' +
    '  <a routerLink="/">ホーム</a>' +
    '  <a routerLink="/contact">お問い合わせ</a>' +
    '</nav>' +
    '<router-outlet />',
})
export class AppComponent {}

4リダイレクトと404ページを用意する

redirectTo でトップへのアクセスを別ページへ転送し、'**'(ワイルドカード)でどのルートにも一致しないURLを404ページへ導きます。ルートは上から順に照合されるため、'**' を必ず最後に書くのが鉄則です。存在しないURLへのアクセスは実際のサービスでは日常的に起きるので、404の用意は実務の必須項目です。

import { Routes } from '@angular/router';
import { DashboardComponent } from './dashboard.component';
import { NotFoundComponent } from './not-found.component';

export const routes: Routes = [
  // トップへのアクセスは /dashboard へ転送する
  { path: '', redirectTo: 'dashboard', pathMatch: 'full' },
  { path: 'dashboard', component: DashboardComponent },
  // どのルートにも一致しなければ404ページ(必ず最後に書く)
  { path: '**', component: NotFoundComponent },
];

5管理画面のルート構成を設計する

注文・顧客・設定の3画面を持つ管理画面を想定した、実務スケールのルート設計です。トップは注文一覧へリダイレクトし、最後にワイルドカードで404を受け止める、という定番の並びがそのまま使えます。新しい画面を増やすときは、この配列に1行足してナビにリンクを追加するだけです。

import { Routes } from '@angular/router';
import { OrderListComponent } from './order-list.component';
import { CustomerListComponent } from './customer-list.component';
import { SettingsComponent } from './settings.component';
import { NotFoundComponent } from './not-found.component';

// 管理画面: 注文一覧をホームにして、顧客・設定ページを並べる
export const routes: Routes = [
  { path: '', redirectTo: 'orders', pathMatch: 'full' },
  { path: 'orders', component: OrderListComponent },
  { path: 'customers', component: CustomerListComponent },
  { path: 'settings', component: SettingsComponent },
  { path: '**', component: NotFoundComponent },
];

// ナビ側は <a routerLink="/orders">注文</a> のように並べる