Angular 2 router.navigate でコンポーネント間をナビゲートする方法
Angular 2 router.navigate のプログラミング解説
基本的な使用方法
import { Router } from '@angular/router';
constructor(private router: Router) { }
navigateTo(path: string) {
this.router.navigate([path]);
}
このコードは、path
パラメータで指定されたコンポーネントにナビゲートします。
パラメータの渡し方
コンポーネントにパラメータを渡すには、queryParams
オプションを使用します。
navigateTo(path: string, queryParams: any) {
this.router.navigate([path], { queryParams });
}
相対パスによるナビゲート
現在のコンポーネントから相対パスでナビゲートするには、./
接頭辞を使用します。
navigateTo('./child-component');
アプリケーションのルートからの絶対パスでナビゲートするには、'/'
接頭辞を使用します。
navigateTo('/home');
プログラムによるナビゲート
router.navigate
メソッドは、任意のタイミングでナビゲートに使用できます。たとえば、ボタンをクリックしたときにナビゲートしたり、条件に応じてナビゲートしたりできます。
navigateToHome() {
this.router.navigate(['/home']);
}
例
次の例は、router.navigate
メソッドを使用して、UserListComponent
と UserDetailsComponent
の間をナビゲートする方法を示します。
// UserListComponent.ts
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { UserService } from '../services/user.service';
@Component({
selector: 'app-user-list',
templateUrl: './user-list.component.html',
styleUrls: ['./user-list.component.css']
})
export class UserListComponent implements OnInit {
users: User[];
constructor(private router: Router, private userService: UserService) { }
ngOnInit() {
this.userService.getUsers().subscribe(users => this.users = users);
}
onUserClick(user: User) {
this.router.navigate(['/users', user.id]);
}
}
// UserDetailsComponent.ts
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { UserService } from '../services/user.service';
@Component({
selector: 'app-user-details',
templateUrl: './user-details.component.html',
styleUrls: ['./user-details.component.css']
})
export class UserDetailsComponent implements OnInit {
user: User;
constructor(private route: ActivatedRoute, private userService: UserService) { }
ngOnInit() {
const id = parseInt(this.route.snapshot.paramMap.get('id'));
this.userService.getUser(id).subscribe(user => this.user = user);
}
}
この例では、UserListComponent
でユーザーをクリックすると、UserDetailsComponent
にナビゲートします。UserDetailsComponent
は、ActivatedRoute
サービスを使用して、ナビゲーションパラメータからユーザー ID を取得します。
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { UserListComponent } from './user-list/user-list.component';
import { UserDetailsComponent } from './user-details/user-details.component';
const routes: Routes = [
{ path: '', component: UserListComponent },
{ path: 'users/:id', component: UserDetailsComponent }
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppModule { }
user-list.component.html
<ul>
<li *ngFor="let user of users" (click)="onUserClick(user)">
{{ user.name }}
</li>
</ul>
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { UserService } from '../services/user.service';
@Component({
selector: 'app-user-list',
templateUrl: './user-list.component.html',
styleUrls: ['./user-list.component.css']
})
export class UserListComponent implements OnInit {
users: User[];
constructor(private router: Router, private userService: UserService) { }
ngOnInit() {
this.userService.getUsers().subscribe(users => this.users = users);
}
onUserClick(user: User) {
this.router.navigate(['/users', user.id]);
}
}
<h2>{{ user.name }}</h2>
<p>{{ user.email }}</p>
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { UserService } from '../services/user.service';
@Component({
selector: 'app-user-details',
templateUrl: './user-details.component.html',
styleUrls: ['./user-details.component.css']
})
export class UserDetailsComponent implements OnInit {
user: User;
constructor(private route: ActivatedRoute, private userService: UserService) { }
ngOnInit() {
const id = parseInt(this.route.snapshot.paramMap.get('id'));
this.userService.getUser(id).subscribe(user => this.user = user);
}
}
user.service.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class UserService {
constructor(private http: HttpClient) { }
getUsers() {
return this.http.get<User[]>('https://jsonplaceholder.typicode.com/users');
}
getUser(id: number) {
return this.http.get<User>(`https://jsonplaceholder.typicode.com/users/${id}`);
}
}
- このコードを新しい Angular プロジェクトにコピーします。
npm install
コマンドを実行して、必要な依存関係をインストールします。ng serve
コマンドを実行して、アプリケーションを実行します。- ブラウザで http://localhost:4200 にアクセスします。
Users
リンクをクリックすると、UserListComponent
が表示されます。- ユーザー名のいずれかをクリックすると、
UserDetailsComponent
が表示されます。
- 独自の API エンドポイントを使用して、ユーザーのデータを取得できます。
- ユーザーの詳細ページにさらに情報を追加できます。
- ナビゲーションバーを追加して、アプリケーション内の他のコンポーネントにナビゲートできるようにします。
RouterLink
ディレクティブは、テンプレート内でナビゲートに使用できます。
<a routerLink="/users">Users</a>
このコードは、Users
リンクをクリックすると UserDetailsComponent
にナビゲートします。
ActivatedRoute サービス
ActivatedRoute
サービスは、現在のナビゲーションルートに関する情報にアクセスするために使用できます。
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
@Component({
selector: 'app-user-details',
templateUrl: './user-details.component.html',
styleUrls: ['./user-details.component.css']
})
export class UserDetailsComponent implements OnInit {
id: number;
constructor(private route: ActivatedRoute) { }
ngOnInit() {
this.id = parseInt(this.route.snapshot.paramMap.get('id'));
}
}
このコードは、id
変数に現在のナビゲーションルートからのユーザー ID を格納します。
Location サービス
Location
サービスは、現在の URL を取得および変更するために使用できます。
import { Component, OnInit } from '@angular/core';
import { Location } from '@angular/common';
@Component({
selector: 'app-user-details',
templateUrl: './user-details.component.html',
styleUrls: ['./user-details.component.css']
})
export class UserDetailsComponent implements OnInit {
constructor(private location: Location) { }
goBack() {
this.location.back();
}
}
このコードは、goBack
メソッドがブラウザの戻るボタンと同じように動作するようにします。
Window オブジェクト
window
オブジェクトを使用して、JavaScript でネイティブにナビゲートすることもできます。
window.location.href = '/users';
このコードは、Users
ページにナビゲートします。
どの方法を選択する必要がありますか?
使用する方法は、要件によって異なります。
- テンプレート内でナビゲートする場合は、
RouterLink
ディレクティブを使用します。 - 現在のナビゲーションルートに関する情報にアクセスする必要がある場合は、
ActivatedRoute
サービスを使用します。 - 現在の URL を取得または変更する必要がある場合は、
Location
サービスを使用します。 - JavaScript でネイティブにナビゲートする必要がある場合は、
window
オブジェクトを使用します。
javascript angular angular2-routing