![見出し画像](https://assets.st-note.com/production/uploads/images/86839472/rectangle_large_type_2_fa16c22aee358a4724829ac04aae3c71.jpeg?width=1200)
Angular_ルーティングの仕組み #264日目
Angularはコンポーネント単位でhtmlを書いたり、機能を実装したりします。そしてそのコンポーネントを組み合わせることで1つのアプリケーションを作成していきますが、どのパスでどのコンポーネントを表示するか、自分で設定することが可能です。
それらの振り分けの処理をルーティングと呼びます。
ちなみにAngularはSingle Page Application (SPA) なので、Single Pageと聞くとパスのような概念は存在しないように感じます。ただSingle Pageとはそういう意味ではなく、様々なコンポーネントを1つのファイル内に収めつつ、その中にはパスを制御する仕組み (ルーティング) が存在します。
SPAは最初の読み込みに時間がかかりますが、1つのファイルに各コンポーネントが収まっているので、それらのコンポーネント間の遷移 (ページ遷移) が速いのが利点です。また、Angularではページの閲覧履歴も管理されているそうです。
ルーティングファイルの作成
ngコマンドを使用して新しいプロジェクトを作成した場合は、routingファイルを作成するかどうか尋ねられます。yesとすれば「app-routing.module.ts」が作成されます。
後から追加したい場合は、src/appで以下コマンドを叩けばOKです。
$ ng generate module app-routing --flat --module=app
--flatオプションは、プロジェクトのトップレベルにファイルを作成する指示です。これを指定しないと「app-routing」というフォルダが作成されてしまいます。
--module=appオプションは、app.module.tsファイルのimport文と、importsのリストに作成したモジュール名を追加する指示です。
ルーティングファイルの設定
作成されたapp-routing.module.tsを以下のように編集します。ここではAngularの公式チュートリアルのコードを流用しています。
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HeroesComponent } from './heroes/heroes.component';
import { HeroDetailComponent } from './hero-detail/hero-detail.component';
import { DashboardComponent } from './dashboard/dashboard.component';
const routes: Routes = [
{ path: '', redirectTo: '/dashboard', pathMatch: 'full' },
{ path: 'dashboard', component: DashboardComponent },
{ path: 'heroes', component: HeroesComponent },
{ path: 'detail/:id', component: HeroDetailComponent },
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
const routes:にルーティング情報である「Routes」を設定し、pathとcomponentをプロパティに持つ配列を記述します。
URLはホームアドレスとパスで構成されますが、ここでのpathで設定されている文字列がホームアドレスに続くパスになります。このパスにアクセスすると、そのcomponentにアクセスできるという仕組みです。パスが何も入っていない「''」で定義されるのがデフォルトルートです。
imports: [RouterModule.forRoot(routes)]はアプリケーションのルートレベルでルーターを設定しているという意味です。
exports: [RouterModule]で、RouterModuleがアプリ全体で利用できるようになります。
router-outletを配置
Angularでルーティングを使用するには、HTMLファイル上のルーティングを読み込む箇所にrouter-outletを配置します。
[app.component.html]
<h1>{{ title }}</h1>
<!--<app-heroes></app-heroes>-->
<nav>
<a routerLink="/dashboard">dashboard</a>
<a routerLink="/heroes">Heroes</a>
</nav>
<router-outlet></router-outlet>
router-outletの箇所がルーティングによって表示内容が色々と変わる場所なので、ツールバー等、常にアプリに表示しておきたいコンポーネントはルーターの外側に配置します。上記ではdashbordとheroesをルーターの外側に置いています。
ルーターを使ってパラメーターの受け渡しも出来るので、この辺もまた追って整理したいと思います。
ここまでお読みいただきありがとうございました!