以下のセクションでは、いくつかの主要なルーターの概念と用語を取り上げています。
ルーターイベント
各ナビゲーション中に、Router
はRouter.events
プロパティを通じてナビゲーションイベントを発行します。
これらのイベントを次の表に示します。
ルーターイベント | 詳細 |
---|---|
NavigationStart |
ナビゲーションが開始されたときにトリガーされます。 |
RouteConfigLoadStart |
Router がルート設定を遅延読み込みする前にトリガーされます。 |
RouteConfigLoadEnd |
ルートが遅延読み込みされた後にトリガーされます。 |
RoutesRecognized |
RouterがURLを解析し、ルートが認識されたときにトリガーされます。 |
GuardsCheckStart |
RouterがルーティングのGuardsフェーズを開始したときにトリガーされます。 |
ChildActivationStart |
Routerがルートの子をアクティブ化し始めたときにトリガーされます。 |
ActivationStart |
Routerがルートをアクティブ化し始めたときにトリガーされます。 |
GuardsCheckEnd |
RouterがルーティングのGuardsフェーズを正常に完了したときにトリガーされます。 |
ResolveStart |
RouterがルーティングのResolveフェーズを開始したときにトリガーされます。 |
ResolveEnd |
RouterがルーティングのResolveフェーズを正常に完了したときにトリガーされます。 |
ChildActivationEnd |
Routerがルートの子のアクティブ化を完了したときにトリガーされます。 |
ActivationEnd |
Routerがルートのアクティブ化を完了したときにトリガーされます。 |
NavigationEnd |
ナビゲーションが正常に終了したときにトリガーされます。 |
NavigationCancel |
ナビゲーションがキャンセルされたときにトリガーされます。これは、ナビゲーション中にルートガードがfalseを返すか、UrlTree またはRedirectCommand を返すことによってリダイレクトされた場合に発生します。 |
NavigationError |
予期せぬエラーによりナビゲーションが失敗したときにトリガーされます。 |
Scroll |
スクロールイベントを表します。 |
withDebugTracing
機能を有効にすると、Angularはこれらのイベントをコンソールにログ出力します。
ルーター用語
主なRouter
用語とその意味を以下に示します。
ルーターの要素 | 詳細 |
---|---|
Router |
アクティブなURLに対応するアプリケーションコンポーネントを表示します。あるコンポーネントから次のコンポーネントへのナビゲーションを管理します。 |
provideRouter |
アプリケーションビュー間をナビゲートするために必要なサービスプロバイダーを提供します。 |
RouterModule |
アプリケーションビュー間をナビゲートするために必要なサービスプロバイダーとディレクティブを提供する独立したNgModuleです。 |
Routes |
URLパスをコンポーネントにマッピングするRoute の配列を定義します。 |
Route |
URLパターンに基づいてルーターがコンポーネントにナビゲートする方法を定義します。ほとんどのルートは、パスとコンポーネントタイプで構成されます。 |
RouterOutlet |
ルーターがビューを表示する場所を示すディレクティブ (<router-outlet> ) です。 |
RouterLink |
クリック可能なHTML要素をルートにバインドするためのディレクティブです。_文字列_または_リンクパラメーター配列_にバインドされたrouterLink ディレクティブを持つ要素をクリックすると、ナビゲーションがトリガーされます。 |
RouterLinkActive |
関連するrouterLink が要素内または要素上でアクティブ/非アクティブになったときに、HTML要素からクラスを追加/削除するためのディレクティブです。アクセシビリティ向上のため、アクティブなリンクのaria-current を設定することもできます。 |
ActivatedRoute |
ルートパラメーター、静的データ、解決済みデータ、グローバルクエリパラメーター、グローバルフラグメントなどのルート固有の情報を含む、各ルートコンポーネントに提供されるサービスです。 |
RouterState |
現在アクティブなルートのツリーと、ルートツリーを走査するための便利なメソッドを含む、ルーターの現在の状態です。 |
リンクパラメーター配列 | ルーターがルーティング命令として解釈する配列です。この配列をRouterLink にバインドしたり、Router.navigate メソッドの引数として渡したりできます。 |
ルーティングコンポーネント | ルーターナビゲーションに基づいてビューを表示する、RouterOutlet を持つAngularコンポーネントです。 |
<base href>
ルーターは、ナビゲーションにブラウザのhistory.pushStateを使用します。
pushState
を使用すると、アプリケーション内のURLパスをカスタマイズできます。例: localhost:4200/crisis-center
。
アプリケーション内のURLは、サーバーURLと区別できない場合があります。
最新のHTML5ブラウザが最初にpushState
をサポートしたため、多くの人がこれらのURLを「HTML5スタイル」URLと呼んでいます。
HELPFUL: HTML5スタイルのナビゲーションはルーターのデフォルトです。
LocationStrategyとブラウザURLスタイルのセクションで、HTML5スタイルが推奨される理由、その動作を調整する方法、必要に応じて古いハッシュ(#
)スタイルに切り替える方法を学びましょう。
pushState
ルーティングを機能させるには、アプリケーションのindex.html
に<base href>
要素を追加する必要があります。
ブラウザは、CSSファイル、スクリプト、画像を相対URLで参照する際に、<base href>
の値をプレフィックスとして使用します。
<base>
要素は<head>
タグの直後に追加します。
app
フォルダがこのアプリケーションのアプリケーションルートである場合、index.html
のhref
値をここに示されているように設定します。
src/index.html (base-href)
<!DOCTYPE html><html lang="en"> <head> <!-- Set the base href --> <base href="/"> <title>Angular Router</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <app-root></app-root> </body></html>
HTML5 URLと<base href>
以下のガイドラインでは、URLのさまざまな部分について言及します。 この図は、それらの部分が何を参照しているかを示しています。
foo://example.com:8042/over/there?name=ferret#nose\_/ \______________/\_________/ \_________/ \__/ | | | | |scheme authority path query fragment
ルーターはデフォルトでHTML5 pushStateスタイルを使用しますが、その戦略を<base href>
で設定する必要があります。
この戦略を設定する推奨される方法は、index.html
の<head>
に<base href>
要素タグを追加することです。
<base href="/">
そのタグがないと、アプリケーションに「ディープリンク」した場合、ブラウザがリソース(画像、CSS、スクリプト)をロードできない可能性があります。
一部の開発者は、<head>
またはindex.html
にアクセスできないなどの理由で、<base>
要素を追加できない場合があります。
そのような開発者でも、以下の2つの手順を実行することでHTML5 URLを使用できます。
ルーターに適切な
APP_BASE_HREF
値を提供します。すべてのWebリソース(CSS、画像、スクリプト、テンプレートHTMLファイル)にルートURL(
authority
を持つURL)を使用します。<base href>
のpath
は"/"で終わる必要があります。ブラウザは、最も右の"/"に続くpath
内の文字を無視するためです。<base href>
にquery
部分が含まれている場合、query
は、ページ内のリンクのpath
が空でquery
がない場合にのみ使用されます。 これは、<base href>
内のquery
がHashLocationStrategy
を使用している場合にのみ含まれることを意味します。ページ内のリンクがルートURL(
authority
を持つ)である場合、<base href>
は使用されません。 このように、authority
を持つAPP_BASE_HREF
は、Angularによって作成されたすべてのリンクが<base href>
の値を無視するようにします。<base href>
内のフラグメントは_決して_保持されません。
<base href>
がターゲットURIの構築にどのように使用されるかについてのより完全な情報は、参照の変換に関するRFCセクションを参照してください。
HashLocationStrategy
AppModule
のRouterModule.forRoot()
の2番目の引数として、オブジェクト内でuseHash: true
を提供することでHashLocationStrategy
を使用します。
providers: [ provideRouter(appRoutes, withHashLocation())]
RouterModule.forRoot
を使用する場合、これは2番目の引数RouterModule.forRoot(routes, {useHash: true})
でuseHash: true
を使用して設定されます。