Angular Routerは、アプリケーションのナビゲーションを支援するために使用できる強力なマッチング戦略をサポートしています。 このマッチング戦略は、パラメーター付きの静的ルート、可変ルート、ワイルドカードルートなどをサポートしています。 また、URLがより複雑な状況で独自のカスタムパターンマッチを作成できます。
このチュートリアルでは、AngularのUrlMatcher
を使用してカスタムルートマッチャーを作成します。
このマッチャーは、URL内のTwitterハンドルを検索します。
目標
AngularのUrlMatcher
を実装してカスタムルートマッチャーを作成します。
サンプルアプリケーションの作成
Angular CLIを使用して、新しいアプリケーションangular-custom-route-matchを作成します。 デフォルトのAngularアプリケーションフレームワークに加えて、profileコンポーネントも作成します。
新しいAngularプロジェクト、angular-custom-route-matchを作成します。
ng new angular-custom-route-match
Angular routingを追加しますか?
と表示されたら、Y
を選択します。どのスタイルシート形式を使用しますか?
と表示されたら、CSS
を選択します。しばらくすると、新しいプロジェクト
angular-custom-route-match
の準備が整います。ターミナルから
angular-custom-route-match
ディレクトリに移動します。コンポーネント、profileを作成します。
ng generate component profile
コードエディタで
profile.component.html
ファイルを見つけ、プレースホルダーコンテンツを次のHTMLに置き換えます。src/app/profile/profile.component.html
<p> Hello {{ username }}!</p>
コードエディタで
app.component.html
ファイルを見つけ、プレースホルダーコンテンツを次のHTMLに置き換えます。src/app/app.component.html
<h2>Routing with Custom Matching</h2>Navigate to <a routerLink="/@Angular">my profile</a><router-outlet></router-outlet>
アプリケーションのルートを構成する
アプリケーションフレームワークが整ったら、次にapp.config.ts
ファイルにルーティング機能を追加する必要があります。
このプロセスの一環として、URL内のTwitterハンドルを検索するカスタムURLマッチャーを作成します。
このハンドルは、先行する@
シンボルによって識別されます。
コードエディタで
app.config.ts
ファイルを開きます。Angularの
provideRouter
とwithComponentInputBinding
、およびアプリケーションルートのimport
ステートメントを追加します。import {provideRouter, withComponentInputBinding} from '@angular/router'; import {routes} from './app.routes';
プロバイダー配列に
provideRouter(routes, withComponentInputBinding())
ステートメントを追加します。アプリケーションルートに次のコードを追加して、カスタムルートマッチャーを定義します。
src/app/app.routes.ts
import {Routes, UrlSegment} from '@angular/router';import {ProfileComponent} from './profile/profile.component';export const routes: Routes = [ { matcher: (url) => { if (url.length === 1 && url[0].path.match(/^@[\w]+$/gm)) { return {consumed: url, posParams: {username: new UrlSegment(url[0].path.slice(1), {})}}; } return null; }, component: ProfileComponent, },];
このカスタムマッチャーは、次のタスクを実行する関数です。
- マッチャーは、配列にセグメントが1つしかないことを確認します
- マッチャーは正規表現を使用して、ユーザー名の形式が一致することを確認します
- 一致があれば、関数は完全なURLを返し、
username
ルートパラメーターをパスのサブストリングとして定義します - 一致しなければ、関数はnullを返し、ルーターはURLと一致する他のルートを探し続けます
HELPFUL: カスタムURLマッチャーは、他のルート定義と同じように動作します。他のルートと同じように、子ルートまたは遅延読み込みルートを定義します。
ルートパラメーターの読み取り
カスタムマッチャーが設定されたので、profile
コンポーネントでルートパラメーターをバインドできます。
コードエディタでprofile.component.ts
ファイルを開き、username
パラメーターと一致するInput
を作成します。
以前、provideRouter
でwithComponentInputBinding
機能を追加しました。
これにより、Router
はルートコンポーネントに直接情報をバインドできます。
@Input() username!: string;
カスタムURLマッチャーをテストする
コードが設定されたので、カスタムURLマッチャーをテストできます。
ターミナルウィンドウから
ng serve
コマンドを実行します。ng serve
ブラウザを
http://localhost:4200
に開きます。私のプロフィールに移動
という文章を含む単一のWebページが表示されます。私のプロフィールハイパーリンクをクリックします。
こんにちは、Angular!
という新しい文章がページに表示されます。
次のステップ
Angular Routerのパターンマッチングを使用すると、アプリケーションで動的なURLがある場合に、多くの柔軟性を得られます。 Angular Routerの詳細については、以下のトピックを参照してください。
HELPFUL: このコンテンツは、Brandon RobertsによるAngular Routerを使用したカスタムルートマッチングに基づいています。