0Pricing
Angular Academy · レッスン

Routerイベントとナビゲーション

ナビゲーションのライフサイクルイベントに応答します

「Routerイベントとナビゲーション」はCoddyKit上の無料Angular Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAngular Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Angular Academyコースには全4レッスンが含まれています。

routerイベントのストリーム

Router.eventsは、ナビゲーションのライフサイクル(開始、認識、guardの確認、resolve、終了)の間にイベントを発行するobservableです。購読すると、アプリ全体でナビゲーションに反応できます。

主なイベントの種類

よく使うイベントには、NavigationStart、NavigationEnd、NavigationCancel、NavigationErrorがあります。それぞれクラスのインスタンスなので、フィルタリングできます。

NavigationEndを監視する

filterとinstanceofによるチェックを使うと、ストリームを特定のイベント型に絞り込めます。

import { Router, NavigationEnd } from '@angular/router';
import { filter } from 'rxjs';

const router = inject(Router);
router.events.pipe(
  filter(e => e instanceof NavigationEnd)
).subscribe(e => console.log('navigated to', e.urlAfterRedirects));

グローバルなローディングインジケーター

NavigationStartからNavigationEnd、NavigationCancel、またはNavigationErrorまでの間、スピナーを表示します。

router.events.subscribe(e => {
  if (e instanceof NavigationStart) this.loading = true;
  if (e instanceof NavigationEnd ||
      e instanceof NavigationCancel ||
      e instanceof NavigationError) this.loading = false;
});

ナビゲーション時にトップへスクロールする

ナビゲーションが成功するたびに、スクロール位置をリセットします。(組み込みのscrollPositionRestorationも利用できます。)

router.events.pipe(
  filter(e => e instanceof NavigationEnd)
).subscribe(() => window.scrollTo(0, 0));

Analyticsのページトラッキング

NavigationEndは、Analyticsにページビューを記録するのに最適なフックです。

router.events.pipe(
  filter((e): e is NavigationEnd => e instanceof NavigationEnd)
).subscribe(e => analytics.pageView(e.urlAfterRedirects));

プログラムによるナビゲーション

router.navigateはcommands配列を受け取り、router.navigateByUrlは完全なURL文字列を受け取ります。どちらも、ナビゲーションが成功したかどうかを解決するpromiseを返します。

router.navigate(['/user', 42]);
router.navigateByUrl('/search?q=ng');

const ok = await router.navigate(['/home']);
console.log('success?', ok);

相対ナビゲーション

relativeToを使うと、現在のルートを基準にナビゲーションできます。たとえば、子コンポーネントから移動する場合に使います。

const route = inject(ActivatedRoute);
router.navigate(['../sibling'], { relativeTo: route });

routerLinkとアクティブ状態

テンプレートでは、routerLinkが宣言的にナビゲーションを処理し、routerLinkActiveがアクティブなリンクにCSSクラスを追加します。

<a routerLink="/home" routerLinkActive="active">Home</a>
<a [routerLink]="['/user', userId]"
   routerLinkActive="active">Profile</a>

NavigationErrorの処理

NavigationErrorを購読すると、失敗したナビゲーション(resolverの失敗やlazy-loadの失敗など)を処理し、わかりやすいメッセージを表示できます。

router.events.pipe(
  filter(e => e instanceof NavigationError)
).subscribe(e => console.error('nav failed', e.error));

型付きイベントのフィルタリング

AngularにはRouterEventの型も用意されています。filter内のtype guard述語を使うと、キャストなしでsubscriber内のイベントを正しい型として扱えます。

クイックチェック

routerイベントについての理解度を確認しましょう。

まとめ:Routerイベントとナビゲーション

Router.eventsはナビゲーションのライフサイクルを公開します。

  • NavigationStart、NavigationEnd、NavigationCancel、NavigationErrorをフィルタリングします。
  • ローディングスピナー、スクロールのリセット、Analyticsを制御します。
  • navigate、navigateByUrl、またはrouterLinkで移動します。

Angular Router Advancedを修了しました。

よくある質問

「Routerイベントとナビゲーション」レッスンは無料ですか?

はい。「Routerイベントとナビゲーション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Angular Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Angular Academyコースには全4レッスンが含まれています。

「Routerイベントとナビゲーション」で何を学びますか?

ナビゲーションのライフサイクルイベントに応答します ブラウザで直接実行するハンズオンコードでAngular Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Angular Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAngular Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「Routerイベントとナビゲーション」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAngular Academyレッスンでコードを書いて実行できますか?

はい。すべてのAngular Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

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