ActivatedRouteSnapshotクラスを使って現在のルートを取得する
現在のルートを取得する方法
AngularとAngular2-Routingで現在のルートを取得するには、いくつかの方法があります。
ActivatedRouteサービスは、現在のルートに関する情報を提供するサービスです。このサービスを使用するには、以下の手順が必要です。
- コンポーネントクラスに
ActivatedRoute
サービスをインジェクションする。 ActivatedRoute
サービスのparams
プロパティまたはqueryParams
プロパティを使用して、ルートパラメータまたはクエリパラメータを取得する。
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
@Component({
selector: 'my-component',
templateUrl: './my-component.component.html',
})
export class MyComponent implements OnInit {
private route: ActivatedRoute;
constructor(route: ActivatedRoute) {
this.route = route;
}
ngOnInit() {
// 現在のルートパラメータを取得する
this.route.params.subscribe((params) => {
const id = params['id'];
// ...
});
// 現在のクエリパラメータを取得する
this.route.queryParams.subscribe((queryParams) => {
const search = queryParams['search'];
// ...
});
}
}
Router
サービスのurl
プロパティを使用して、現在のURLを取得する。
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
@Component({
selector: 'my-component',
templateUrl: './my-component.component.html',
})
export class MyComponent implements OnInit {
private router: Router;
constructor(router: Router) {
this.router = router;
}
ngOnInit() {
// 現在のURLを取得する
const url = this.router.url;
// ...
}
}
import { Component, OnInit } from '@angular/core';
import { Location } from '@angular/common';
@Component({
selector: 'my-component',
templateUrl: './my-component.component.html',
})
export class MyComponent implements OnInit {
private location: Location;
constructor(location: Location) {
this.location = location;
}
ngOnInit() {
// 現在のURLを取得する
const url = this.location.path();
// ...
}
}
AngularとAngular2-Routingで現在のルートを取得するには、いくつかの方法があります。それぞれの方法にはメリットとデメリットがあるので、状況に合わせて最適な方法を選択する必要があります。
-
ActivatedRouteサービスを使用する
- メリット:
- 現在のルートパラメータやクエリパラメータを簡単に取得できる
- メリット:
-
Routerサービスを使用する
- メリット:
- デメリット:
- メリット:
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
@Component({
selector: 'my-component',
templateUrl: './my-component.component.html',
})
export class MyComponent implements OnInit {
private route: ActivatedRoute;
constructor(route: ActivatedRoute) {
this.route = route;
}
ngOnInit() {
// 現在のルートパラメータを取得する
this.route.params.subscribe((params) => {
const id = params['id'];
console.log(`現在のIDは ${id} です。`);
});
// 現在のクエリパラメータを取得する
this.route.queryParams.subscribe((queryParams) => {
const search = queryParams['search'];
console.log(`現在の検索ワードは ${search} です。`);
});
}
}
このサンプルコードでは、ActivatedRoute
サービスを使用して、現在のルートパラメータとクエリパラメータを取得しています。
現在のルートを取得する他の方法
@angular/router モジュールの ActivatedRouteSnapshot クラスを使用する
- コンポーネントのコンストラクタで、
ActivatedRoute
サービスからActivatedRouteSnapshot
オブジェクトを取得する。 ActivatedRouteSnapshot
オブジェクトから、必要な情報を取得する。
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, ActivatedRouteSnapshot } from '@angular/router';
@Component({
selector: 'my-component',
templateUrl: './my-component.component.html',
})
export class MyComponent implements OnInit {
private route: ActivatedRoute;
constructor(route: ActivatedRoute) {
this.route = route;
}
ngOnInit() {
// 現在のルートスナップショットを取得する
const snapshot = this.route.snapshot;
// 現在のルートパラメータを取得する
const id = snapshot.params['id'];
console.log(`現在のIDは ${id} です。`);
// 現在のクエリパラメータを取得する
const search = snapshot.queryParams['search'];
console.log(`現在の検索ワードは ${search} です。`);
}
}
RxJSを使用する
RxJSは、非同期処理を扱うためのライブラリです。RxJSを使用するには、以下の手順が必要です。
- コンポーネントクラスに
RxJS
をインポートする。 Observable
をサブスクライブして、現在のルートパラメータまたはクエリパラメータを取得する。
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { Observable } from 'rxjs';
@Component({
selector: 'my-component',
templateUrl: './my-component.component.html',
})
export class MyComponent implements OnInit {
private route: ActivatedRoute;
constructor(route: ActivatedRoute) {
this.route = route;
}
ngOnInit() {
// 現在のルートパラメータを取得する
const id$: Observable<string> = this.route.params.pipe(
map((params) => params['id'])
);
id$.subscribe((id) => {
console.log(`現在のIDは ${id} です。`);
});
// 現在のクエリパラメータを取得する
const search$: Observable<string> = this.route.queryParams.pipe(
map((queryParams) => queryParams['search'])
);
search$.subscribe((search) => {
console.log(`現在の検索ワードは ${search} です。`);
});
}
}
window.location
オブジェクトは、ブラウザの現在のURLを表すオブジェクトです。このオブジェクトを使用するには、以下の手順が必要です。
window.location.href
プロパティを使用して、現在のURLを取得する。
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'my-component',
templateUrl: './my-component.component.html',
})
export class MyComponent implements OnInit {
constructor() {}
ngOnInit() {
// 現在のURLを取得する
const url = window.location.href;
// URLから必要な情報を解析する
const id = url.split('/')[2];
console.log(`現在のIDは ${id} です。`);
}
}
angular angular2-routing