ルートパラメーターとクエリパラメーター
ルートパラメーターを読み取り、反応します
「ルートパラメーターとクエリパラメーター」はCoddyKit上の無料Angular Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAngular Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Angular Academyコースには全4レッスンが含まれています。
ルートパラメーターとクエリパラメーターの違い
ルートパラメーターはパスの一部です(/user/42)。クエリパラメーターは?の後に追加されます(/search?q=ng&page=2)。Routerを使うと、どちらにもリアクティブにアクセスできます。
ルートパラメーターの定義
パス内でコロンを使ってパラメーターを宣言します。
export const routes = [
{ path: 'user/:id', component: UserComponent }
];paramMapでパラメーターを読み取る
ActivatedRoute.paramMapは、ルートパラメーターが変わるたびに発行するobservableです。.get()を使って値を読み取ります。
import { inject } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
const route = inject(ActivatedRoute);
route.paramMap.subscribe(params => {
const id = params.get('id');
console.log('user id', id);
});パラメーターを監視する理由
/user/1から/user/2へ移動すると、コンポーネントが再利用されることがあります。constructorは1回しか実行されませんが、paramMapは再び発行されるため、変更に反応するにはsubscribeします。
一度だけ読み取るためのSnapshot
別のパラメーターでコンポーネントが再利用されない場合は、snapshotを同期的に読み取れます。
const id = route.snapshot.paramMap.get('id');
// only valid if the route param will not change
// while this component instance is alivequeryParamMapでクエリパラメーターを扱う
queryParamMapはクエリ文字列の値をobservableとして提供します。
route.queryParamMap.subscribe(qp => {
const page = Number(qp.get('page') ?? '1');
const q = qp.get('q') ?? '';
console.log(q, page);
});クエリパラメーターを指定して移動する
router.navigateまたはrouterLinkディレクティブでqueryParamsオプションを使用します。
import { Router } from '@angular/router';
const router = inject(Router);
router.navigate(['/search'], {
queryParams: { q: 'angular', page: 2 }
});クエリパラメーターを保持する
queryParamsHandling: 'merge'は、一部のパラメーターを更新しながら既存のパラメーターを保持します。'preserve'は、移動先にもパラメーターを引き継ぎます。
router.navigate(['/search'], {
queryParams: { page: 3 },
queryParamsHandling: 'merge'
});コンポーネント入力バインディング(モダンな方法)
withComponentInputBinding()を使うと、ActivatedRouteを介さずに、ルートパラメーターとクエリパラメーターをコンポーネントの@Input()(またはinput signal)に直接バインドできます。
// in provideRouter(routes, withComponentInputBinding())
export class UserComponent {
@Input() id!: string; // bound from /user/:id
}繰り返し出現するパラメーターのためのgetAll
クエリキーが複数回出現する可能性がある場合はgetAll()を使用します。例:?tag=a&tag=b。
route.queryParamMap.subscribe(qp => {
const tags = qp.getAll('tag'); // ['a', 'b']
console.log(tags);
});パラメーターとデータ読み込みの組み合わせ
よくあるパターンは、switchMapを使ってパラメーターをHTTP呼び出しに変換することです。idが変わると再取得されます。
route.paramMap.pipe(
switchMap(p => this.http.get('/api/user/' + p.get('id')))
).subscribe(user => console.log(user));クイックチェック
ルートパラメーターについての理解度を確認しましょう。
振り返り:ルートパラメーターとクエリパラメーター
Routerはパラメーターをリアクティブに提供します。
paramMap:パスパラメーター。コンポーネントの再利用に対応するため監視します。queryParamMap:クエリ文字列。繰り返し出現する値にはgetAllを使用します。snapshot:一度だけ読み取る場合に使用します。withComponentInputBinding():パラメーターを入力にバインドします。
次は、resolverとルートデータです。
よくある質問
「ルートパラメーターとクエリパラメーター」レッスンは無料ですか?
はい。「ルートパラメーターとクエリパラメーター」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Angular Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Angular Academyコースには全4レッスンが含まれています。
「ルートパラメーターとクエリパラメーター」で何を学びますか?
ルートパラメーターを読み取り、反応します ブラウザで直接実行するハンズオンコードでAngular Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Angular Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAngular Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「ルートパラメーターとクエリパラメーター」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAngular Academyレッスンでコードを書いて実行できますか?
はい。すべてのAngular Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ルートパラメーターとクエリパラメーター
- Resolverとルートデータ
- 関数型ルートガード
- Routerイベントとナビゲーション