0Pricing
Angular Academy · レッスン

Resolverとルートデータ

ルートを有効化する前にデータをプリロードします

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

resolverとは

resolverはルートが有効になる前にデータを先読みします。そのため、コンポーネント自体にローディング表示を用意しなくても、データが利用可能な状態でレンダリングできます。

静的なルートデータ

dataプロパティを使うと、ルートに静的な値を追加できます。値はActivatedRoute.dataから読み取れます。

export const routes = [
  { path: 'admin', component: AdminComponent,
    data: { title: 'Admin Panel', roles: ['admin'] } }
];

ルートデータの読み取り

route.dataは、統合されたdataオブジェクトを発行するobservableです。

route.data.subscribe(d => {
  console.log(d['title']); // Admin Panel
});

関数形式のresolver:ResolveFn

現在のAngularではResolveFnを使用します。これはデータ(またはデータを返すobservableやpromise)を返す単純な関数です。

import { ResolveFn } from '@angular/router';
import { inject } from '@angular/core';
import { HttpClient } from '@angular/common/http';

export const userResolver = (route) => {
  const http = inject(HttpClient);
  return http.get('/api/user/' + route.paramMap.get('id'));
};

resolverをルートに接続する

resolveキーの下にresolverを設定します。結果は、そのキーの値としてroute.dataに格納されます。

export const routes = [
  { path: 'user/:id', component: UserComponent,
    resolve: { user: userResolver } }
];

解決済みデータを利用する

解決済みの値は、キーを指定してroute.dataから読み取ります。

route.data.subscribe(d => {
  this.user = d['user']; // already loaded
});

入力バインディングによる解決済みデータ

withComponentInputBinding()を使うと、解決されたキーが一致するコンポーネント入力に自動的にバインドされます。

export class UserComponent {
  @Input() user!: User; // from resolve: { user: ... }
}

resolverとナビゲーションのタイミング

Routerは、ルートを有効にする前にresolverのobservableが完了するまで(またはpromiseが確定するまで)待機します。完了しないresolverがあると、ナビゲーションが停止します。

resolverのエラーを処理する

resolverでエラーが発生すると、ナビゲーションはキャンセルされます。resolver内でエラーを捕捉し、リダイレクトするかフォールバックを返してください。

export const userResolver = (route) => {
  const http = inject(HttpClient);
  const router = inject(Router);
  return http.get('/api/user/' + route.paramMap.get('id')).pipe(
    catchError(() => { router.navigate(['/404']); return EMPTY; })
  );
};

resolverを使う場面

ページを表示する前に必ず存在していなければならないデータにはresolverを使用します。段階的に読み込めるデータの場合は、コンポーネントでローディング状態を表示しながら取得するほうが、より良いUXになることが多いです。時間のかかる任意のデータでナビゲーションをブロックしないでください。

タイトル戦略

Routerには、ドキュメントタイトルを設定するための組み込みのtitleルートプロパティとTitleStrategyがあります。解決済みデータと組み合わせて使うこともよくあります。

export const routes = [
  { path: 'about', component: AboutComponent, title: 'About Us' }
];

クイックチェック

resolverについての理解度を確認しましょう。

振り返り:resolverとルートデータ

resolverは有効化の前にデータを先読みします。

  • data:静的なルート値。
  • ResolveFnとresolve:動的にデータを先読みし、route.dataに格納します。
  • Routerは完了まで待機するため、ナビゲーションが停止しないようエラーを処理します。

次は、関数形式のルートガードです。

よくある質問

「Resolverとルートデータ」レッスンは無料ですか?

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

「Resolverとルートデータ」で何を学びますか?

ルートを有効化する前にデータをプリロードします ブラウザで直接実行するハンズオンコードでAngular Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「Resolverとルートデータ」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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