Vue.jsでページを切り替える「Vue Router」の利用法を解説! TypeScriptの型定義とともに活用しよう
TypeScriptで学ぶJavaScriptフレームワーク「Vue.js」の利用法 第7回
ダウンロード サンプルファイル (83.4 KB)
TypeScriptを利用したVue Routerのルート指定
プロジェクトでTypeScriptの利用を指定した場合、routes配列の要素には内部的に型が指定されており、型に合致しない記述はエラーとなります(図3)。
routes配列の要素に指定されている型(つまり指定できるルートの種類)は、表1に示す5パターンです。なお、この5パターンのルートは、Vue Router内部でRouteRecordRaw型として定義されており、RouteRecordRaw型は内部的に表1の「ルートの型」に示した5つの型のいずれかであると定義されています。
| No. | パスに対応するコンポーネント | ルートの型 |
|---|---|---|
| 1 | 1つのコンポーネント | RouteRecordSingleView |
| 2 | 1つのコンポーネントとn個の子要素 | RouteRecordSingleViewWithChildren |
| 3 | n個のコンポーネント | RouteRecordMultipleViews |
| 4 | n個のコンポーネントとm個の子要素 | RouteRecordMultipleViewsWithChildren |
| 5 | 別のパスへのリダイレクト | RouteRecordRedirect |
各パターンについて、図4のサンプルで説明します。画面上部の各リンクのパスに対応して、画面下部の「Vue Routerの出力結果」にコンポーネントが表示されます。
例1)1つのパスに1つのコンポーネント
もっとも単純なのは、1つのパスに1つのコンポーネントを対応付けるパターンです。リスト4の指定では、「/single」というパスでSingleViewコンポーネントを表示します。
{
path: '/single',
component: SingleView
},
コンポーネントを表示するApp.vueには、リスト5の通り<RouterView>が設定されていますが、リスト4の場合はname属性がついていない(2)の<RouterView>にコンポーネントが表示され、(1)と(3)には何も表示されません。(1)と(3)にコンポーネントを表示させる例は後述します。
<RouterView name="Header" /><!-- ヘッダーのRouterView ...(1)--> <RouterView /><!-- デフォルトのRouterView ...(2)--> <RouterView name="Footer" /><!-- フッターのRouterView ...(3)-->
結果として、画面には図5の通り表示されます。
例2)1つのコンポーネントとn個の子要素
Vue Routerでパスを入れ子にする場合のルート指定をリスト6に示します。
{
path: '/single-with-children',
component: SingleViewWithChildren,
children: [
{
path: 'child1',
component: ChildView1
},
{
path: 'child2',
component: ChildView2
}
]
},
path、component要素と並列に存在するchildren要素の中に、path、component要素が入れ子になっています。この場合、親コンポーネント内に子コンポーネントが入れ子になって表示されます。親コンポーネント(SingleViewWithChildren.vue)には、リスト7の通り<RouterView>が記述されており、ここに子コンポーネントが表示されます。
<template> <div>SingleViewWithChildren(単一ビュー、子要素あり)</div> <div>↓↓↓子要素↓↓↓</div> <RouterView /> <div>↑↑↑子要素↑↑↑</div> </template>
結果として、パスが「/single-with-children/child1」の場合は、親コンポーネントの内部に子コンポーネント(ChildView1)が表示されます。パスが「/single-with-children/child2」の場合は子コンポーネントがChildView2になります(図6)。
例3)n個のコンポーネント
リスト8は、1つのパスに複数のコンポーネントを指定する例です。パス「/multiple」に対して「default」「Header」「Footer」3つのコンポーネントを指定します。
{
path: '/multiple',
components: {
default: MultipleView,
Header: HeaderView,
Footer: FooterView
}
},
「Header」と名前を付けたHeaderViewコンポーネントはリスト4(1)の<RouterView name="Header" />の箇所に、「Footer」と名前を付けたFooterViewコンポーネントはリスト4(3)の<RouterView name="Footer" />の箇所に、それぞれ表示されます。「default」と名前を付けたMultipleViewコンポーネントは、リスト4(2)の<RouterView />(name属性なし)の箇所に表示されるので、結果として図7の表示となります。
例4)n個のコンポーネントとm個の子要素
例2の子要素と、例3の複数コンポーネントを組み合わせて、リスト9の通り指定することもできます。「/multiple-with-children」というパスに対して、default/Header/Footerの3コンポーネントと、2つの子要素を指定しています。
{
path: '/multiple-with-children',
components: {
default: MultipleViewWithChildren,
Header: HeaderView,
Footer: FooterView
},
children: [
{
path: 'child1',
component: ChildView1
},
{
path: 'child2',
component: ChildView2
}
]
},
表示内容は図8の通りで、ヘッダーとフッターが付与されたコンポーネントの内部に子コンポーネントが表示されます。
例5)別のパスへのリダイレクト
あるパスが指定された時に、他のパスにリダイレクトさせることができます。リスト10の例では、「/」へアクセスした際、「/single」へリダイレクトされます。
{
path: '/',
redirect: '/single'
}
この記事は参考になりましたか?
- TypeScriptで学ぶJavaScriptフレームワーク「Vue.js」の利用法連載記事一覧
-
- TypeScriptとも相性抜群なライブラリ──Vue.jsで状態管理を行う新定番「Pin...
- Vue.jsでページを切り替える「Vue Router」の利用法を解説! TypeScri...
- Vue.jsでWebページをつくる際の肝!「コンポーネント」をTypeScriptで活用し...
- この記事の著者
-
WINGSプロジェクト 吉川 英一(ヨシカワ エイイチ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
