Vue.jsの公式ツールであるVueRouterでは設定した名前に好きな名前をつけることができます。
名前を指定すると、router-linkでリンク先を指定するときにルート名で指定することが可能になります。
パスが長い場合など、ルート名にすると可読性が上がります。
ただし、通常のパスを指定する方法とは記述方法が異なります。特に、URLパラメータを設定しているルートに名前を付ける場合は注意が必要です。
ここでは、VueRouterで作成したルートに名前をつける方法について実例を使って解説しています。
ルートに名前をつけるときのポイントと注意点
ルートに名前を付ける際のポイントと通常のルートの設定との違いなどの主な注意点は以下の4点です。
以下で実際にルートに名前をつける手順について解説します。
ルートに名前をつけアクセスする手順
ルートの中にnameプロパティを設置する
VueRouterインスタンスのroutesの中の名前を付けたいパスに、nameプロパティを追加します。
ルートの記述は次のようになります。
const router = new VueRouter({
routes: [
{
path: '/パス',
name: 'ルート名',
component: テンプレートの内容
},
]
})
実例
/userというパスに「originalName」という名前を付与すると次のようになります。
const User = { template: '<p> ユーザーページです </p>'}
const router = new VueRouter({
routes: [
{
path: '/user',
name: 'originalName',
component: User
}
]
})
なお、componentは変数「User」で指定しています。
「User」の内容は上記に記述している{ template: 'ユーザーページです '}
が入ります。
router-linkのto属性はv-bindにする(省略形の場合は「:」をつける)
次に、作成した名前付きルートにアクセスするための、router-linkタグを作成します。
to属性の値をv-bindにして(省略形の場合は「:」をつける)、値をオブジェクトにし、nameプロパティの値でルート名を指定します。
<router-link :to=" { name: 'ルート名' } ">アンカーテキスト</router-link>
※ルート名にシングルクオーテーションをつけないと変数とみなされてしまいます。
実例
「originalName」というルート名へのリンクを設置する場合は以下のようになります。
<body>
<div id="app">
<!-- Userコンポーネントへのリンク -->
<router-link :to="{ name: 'originalName' } ">・UserIdページ</router-link>
<!-- コンポーネントの表示領域 -->
<router-view></router-view>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.11"></script>
<script src="https://unpkg.com/vue-router@3.0.7/dist/vue-router.js"></script>
</body>
以上で名前付きのルートの作成と呼び出しは完了です。
ブラウザの表示
デフォルトではrouter-linkタグのアンカーテキストのみが表示されています。
↓ リンクをクリック
to属性で指定したルート名に対応するコンポーネントの内容が表示されます。
パラメータ付きのルートに名前を設定する方法
パラメータ付きのルートの場合は、パラメータなしの場合とrouter-linkタグの記述方法が異なります。
以下で、パラメータ付きのルートを作成する方法を実例で解説します。
ルートの中にnameプロパティを設置する
VueRouterインスタンスのroutesの中の名前を付けたいパスに、nameプロパティを追加します。
const router = new VueRouter({
routes: [
{
path: '/パス/:パラメータ名',
name: 'ルート名',
component: テンプレートの内容
},
]
})
実例
2つのパラメータ「id」と「name」を持つルートに「userIdName」という名前を設定します。
const UserIdName = {
template: `
<div>
<p>こんにちは「{{ $route.params.name }}」さん!</p>
<p>あなたのユーザーIDは「{{ $route.params.id }}」です。</p>
</div>
`
}
const router = new VueRouter({
routes: [
{
path: '/user/:id/:name',
name: 'userIdName',
component: UserIdName
}
]
})
なお、componentは変数「UserIdName」で指定しています。
「UserIdName」の内容はVueRouterインスタンスの上に定義しています。
router-linkのto属性はv-bindにする(省略形の場合は「:」をつける)
上記で作成した名前付きルートにアクセスするための、router-linkタグを作成します。
to属性の値をv-bindにして(省略形の場合は「:」をつける)、値をオブジェクトにし、nameプロパティの値でルート名を指定します。
ルートにパラメータ設定してある場合は、paramsオブジェクトを追加してパラメータの数だけパラメータ名と値のセットを記述します。
<router-link :to="{ name: 'ルート名', params{ パラメータ名1: 値1, パラメータ名2: 値2,,, } }>アンカーテキスト</router-link>
※ルート名にシングルクオーテーションをつけないと変数とみなされてしまいます。
実例
ルートは2つのパラメータ「id」と「name」を持つので、それぞれをparamsの中に記述します。
<body>
<div id="app">
<!-- UserIdNameコンポーネントへのリンク -->
<router-link :to=" { name: 'userIdName', params: { id: 123, name: 'Steve' } } ">・UserIdとユーザー名のページ</router-link>
<!-- コンポーネントの表示領域 -->
<router-view></router-view>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.11"></script>
<script src="https://unpkg.com/vue-router@3.0.7/dist/vue-router.js"></script>
</body>
以上でパラメータを持つ、名前付きのルートの作成と呼び出しは完了です。
ブラウザの表示
デフォルトではrouter-linkタグのアンカーテキストのみが表示されています。
↓ リンクをクリック
to属性で指定したルート名とパラメータ(params)に対応するコンポーネントの内容が表示されます。
(参考)ルート名をつけたSPAページのコード
参考として、パラメータなしとありのルートに対してルート名をつけて、router-linkタグでリンクを設置したコードを記載しておきます。
.jsファイル
//コンポーネントの中身を定数として作成
const User = { template: '<p> ユーザーページです </p>'}
const UserId = { template: '<p> ユーザーID: {{ $route.params.id }} </p>'}
const UserIdName = {
template: `
<div>
<p>こんにちは「{{ $route.params.name }}」さん!</p>
<p>あなたのユーザーIDは「{{ $route.params.id }}」です。</p>
</div>
`
}
//VueRouterインスタンスの生成
const router = new VueRouter({
routes: [
{
path: '/user',
name: 'originalName',
component: User
},
{
path: '/user/:id',
name: 'userId',
component: UserId
},
{
path: '/user/:id/:name',
name: 'userIdName',
component: UserIdName
}
]
})
//Vueインスタンスの生成
const app = new Vue({
router
}).$mount('#app')
.htmlファイル
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue Router</title>
</head>
<body>
<div id="app">
<!-- Userコンポーネントへのリンク -->
<router-link :to="{ name: 'originalName' } ">・Userページ</router-link>
<br>
<!-- UserIdコンポーネントへのリンク -->
<router-link :to=" { name: 'userId', params: { id: 123 } } ">・UserIdページ</router-link>
<br>
<!-- UserIdNameコンポーネントへのリンク -->
<router-link :to=" { name: 'userIdName', params: { id: 123, name: 'Steve' } } ">・UserIdとユーザー名のページ</router-link>
<!-- コンポーネントの表示領域 -->
<router-view></router-view>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.11"></script>
<script src="https://unpkg.com/vue-router@3.0.7/dist/vue-router.js"></script>
</body>
</html>
ブラウザの表示
デフォルトでのブラウザの表示は以下のようになっています。
↓「・Userページ」をクリック
↓「・UserIdページ」をクリック
パラメータが受け渡され、画面上に表示されます。
↓ 「・UserIdとユーザー名のページ」をクリック
複数のパラメータが受け渡され、画面上に表示されます。