0Pricing
Angular Academy · レッスン

ルートパラメーターとクエリパラメーター

ルートパラメーターを読み取り、反応します

「ルートパラメーターとクエリパラメーター」は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 alive

queryParamMapでクエリパラメーターを扱う

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ルートパラメーターとクエリパラメーター
  2. Resolverとルートデータ
  3. 関数型ルートガード
  4. Routerイベントとナビゲーション
← Angular Academyに戻る