まず、ガードは特定の条件を満たすかどうかをチェックし、ルートナビゲーションの制御を行います。例えば、特定のユーザーがログインしているかどうかを確認して、ログインしていない場合には特定のルートにアクセスさせないようにすることができます。
ガードを作成するには、@Injectable()
デコレータを使用してクラスを作成し、CanActivate
インターフェースを実装します。以下は、ログイン状態をチェックするガードの例です。
import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private router: Router) {}
canActivate(): boolean {
if (/* ログイン状態をチェックする条件 */) {
return true; // ナビゲーションを許可
} else {
this.router.navigate(['/login']); // ログインページにリダイレクト
return false; // ナビゲーションをブロック
}
}
}
上記の例では、CanActivate
インターフェースの canActivate
メソッド内でログイン状態をチェックしています。ログインしている場合は true
を返し、ナビゲーションを許可します。ログインしていない場合は、Router
サービスを使用してログインページにリダイレクトし、false
を返すことでナビゲーションをブロックします。
ガードを使用するには、ルート定義で canActivate
プロパティにガードのクラスを指定します。以下は、ルート定義でのガードの使用例です。
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './home.component';
import { AuthGuard } from './auth.guard';
const routes: Routes = [
{
path: '',
component: HomeComponent,
canActivate: [AuthGuard] // ガードの使用
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class HomeRoutingModule { }
上記の例では、canActivate
プロパティに AuthGuard
クラスを指定しています。これにより、HomeComponent
へのアクセス時に AuthGuard
の条件チェックが行われ、適切なナビゲーション制御が行われます。