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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ルートパラメーターとクエリパラメーター
- Resolverとルートデータ
- 関数型ルートガード
- Routerイベントとナビゲーション