ルーティングの基本的な設定
ここでは、簡単な例を示しながら、Angular ルーティングの基本的な設定を行いましょう。
サンプルの動作。リンクをクリックしたら色が変わるだけ
サンプルプログラムは次のような動きをします。
画面の上部にリンクが設定されており、デフォルトでは何も選択されていません。リンクの色がどれも同じ灰色です。
色の部分はそれぞれのコンポーネントで切り替わっている
ボディー部は青色のコンポーネント (BlueComponent) が表示されています。
BLUE / RED / YELLOW というリンク (ボタン) を押すと、押したリンクボタンが選択された状態になり、ボディー部はボタンの名前に応じた コンポーネントが表示されます。
青色部分は下に示す BlueComponent、赤色部分は RedComponent、黄色部分は YellowComponent です。
BlueComponent (src/app/blue.component.ts) :
import {Component} from '@angular/core';
@Component({
template: `<div class='blue'>BLUE</div>`,
styles: [`
.blue {
font-family: sans-serif;
padding: 1em;
color: white;
background-color: blue;
}`]
})
export class BlueComponent {
}
RedComponent (src/app/red.component.ts) :
import {Component} from '@angular/core';
@Component({
template: `<div class='red'>RED</div>`,
styles: [`
.red {
font-family: sans-serif;
padding: 1em;
color: white;
background-color: red;
}`]
})
export class RedComponent {
}
YellowComponent (src/app/yellow.component.ts):
import {Component} from '@angular/core';
@Component({
template: `<div class='yellow'>YELLOW</div>`,
styles: [ `
.yellow {
font-family: sans-serif;
padding: 1em;
color: black;
background-color: yellow;
}` ]
})
export class YellowComponent {
}
それぞれ、色が違うだけで中身は空っぽで特別なことはありません。
しかし、これまでと違うのは下でルーティングを設定するので、セレクターは不要になります。
これらを AppComponent にリンクを設置します。
AppComponent のコードは空っぽです。
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
}
リンクの指定方法
テンプレート src/app/app.component.html は次の通り。いよいよ、今回のポイントがでてきました。
<p class="mynav"><a routerLink="blue" routerLinkActive="myactive">Blue</a>
<a routerLink="red" routerLinkActive="myactive">Red</a>
<a routerLink="yellow" routerLinkActive="myactive">Yellow</a></p>
<router-outlet></router-outlet>
a タグに routerLink が設定されています。この設定を Angular のルーティングシステムが受け取り、必要なコンポーネントをロードします。
コンポーネントをロードする場所は router-outlet タグで指定します。
routerLinkActive で指定するのは、リンクがアクティブになったときに有効になる CSS クラス名です。ここでは myactive というクラス名が指定されていますので、 リンクをクリックすると、クリックしたリンクの myactive という CSS クラスが有効になります。
CSS は次の通り。
p.mynav a {
color: #000;
font-family: sans-serif;
display: inline-block;
background-color: #eee;
border-radius: 3px;
padding: 0.5em 1em;
text-decoration: none;
}
p.mynav a.myactive {
color: #fff;
font-weight: bold;
background-color: #999;
}
クリックしたボタンの色が変わるのは、ここで myactive クラスをそのように指定しているからです。
ルーティングの設定
ルーティングを設定するために、AppRoutingModule (src/app/app-routing.module.ts) というファイルを新規に作成しましょう。
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { BlueComponent } from './blue.component';
import { RedComponent } from './red.component';
import { YellowComponent } from './yellow.component';
const routes: Routes = [
{path: 'red', component:RedComponent},
{path: 'yellow', component:YellowComponent},
{path: '**', component:BlueComponent},
];
@NgModule({
imports: [
RouterModule.forRoot(routes)
],
exports: [
RouterModule
],
providers: []
})
export class AppRoutingModule { }
コード内の routes の設定で、パスとコンポーネントの対応付けをしています。
routes のタプル内で URL のパスが一致したところで、それに該当するコンポーネントが読み込まれます。
どれにも一致しない場合は ** というワイルドカードで指定したコンポーネントが読み込まれます。(このため、上記ではデフォルトで BlueComponent が読み込まれていました)
ルートモジュールに上記のルーティング用のモジュールを取り込むことで、Angular に認識されるようになります。
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { BlueComponent } from './blue.component';
import { RedComponent } from './red.component';
import { YellowComponent } from './yellow.component';
@NgModule({
declarations: [
AppComponent,
BlueComponent,
RedComponent,
YellowComponent
],
imports: [
BrowserModule,
AppRoutingModule,
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
以上で、基本的なルーティングの設定方法について説明しました。