Vue.jsの公式ライブラリVueRouterを使うとSPAのアプリケーションやサイトを簡単に作成することができます。
その際、古いページをリニューアルしたときなど、新しいページに転送(リダイレクト)したい場合があります。
VueRouterではとても簡単に転送設定をすることができます。ここではその方法について、名前付きルートの場合も含めまとめています。
転送(リダイレクト)を設定する方法
転送(リダイレクト)を設定するには、転送をかけたいルートの中にredirect: '転送先のルートのパス'
を記述します。
すると、該当するルートにアクセスしたときに、自動的にredirectで設定したページに転送されます。
ルートの記述は以下のようになります。
const router = new VueRouter({
routes: [
{
//リダイレクトの設定
path: 'パス',
component: htmlの内容,
redirect: 'リダイレクト先のパス'
}
]
})
転送(リダイレクト)の設定方法実例(パスで指定)
パスが「/old」の古いページを、新しいページ「/new」にリダイレクトする場合は以下のようになります。
.jsファイル
//コンポーネントの中身
const OldPage = { template: '<p> 古いページです。 </p>'}
const NewPage = { template: '<p> 新しいページです。 </p>'}
//VueRouterインスタンスの生成
const router = new VueRouter({
routes: [
{
path: '/old',
component: OldPage,
redirect: '/new'
},
{
path: '/new',
component: NewPage,
}
]
})
//Vueインスタンスの生成
const app = new Vue({
router
}).$mount('#app')
redirect: '/new'
を記述したことで、「/old」にアクセスすると、「/new」のコンポーネントを表示します。
.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="/old">・古いページ</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>
ブラウザの表示
デフォルトでは「古いページ」へのリンクのみが表示されています。
↓ リンクをクリック
「/new」にアクセスしたのと同じ内容が表示されます。
名前つきルートの転送(リダイレクト)の方法
ルートにnameプロパティでルート名が付けられている場合は、ルート名を使ってリダイレクトの設定ができます。
その際の記述は以下のようになります。
redirect: { name: '転送先のルート名'}
実例
ルート名が「PreviousPage」という古いページを、ルート名「RenewalPage」にリダイレクトする場合は以下のようになります。
.jsファイル
//コンポーネントの中身を定数として作成
const OldPage = { template: '<p> 古いページの内容です。 </p>'}
const NewPage = { template: '<p> 新しいページの内容です。 </p>'}
//VueRouterインスタンスの生成
const router = new VueRouter({
routes: [
{
path: '/old',
component: OldPage,
name: 'PreviousPage',
redirect: { name: 'RenewalPage' }
},
{
path: '/new',
name: 'RenewalPage',
component: NewPage,
}
]
})
//Vueインスタンスの生成
const app = new Vue({
router
}).$mount('#app')
redirect: { name: 'RenewalPage' }
を記述したことで、ルートパス「/old」またはルート名「{ name: ‘PreviousPage’ }」にアクセスすると、ルート名「RenewalPage」のコンポーネントを表示します。
.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: 'PreviousPage' } ">・古いページ</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>
ブラウザの表示
デフォルトでは「古いページ」へのリンクのみが表示されています。
↓ リンクをクリック
ルート名「RenewalPage」にアクセスしたのと同じ内容が表示されます。
URLそのままで違うページの内容を表示する方法(エイリアスの設定)
リダイレクトと似た処理に、alias(エイリアス)というものがあります。
ルートの中でalias(エイリアス)プロパティを設定すると、URLはpathのままで、内容はaliasで指定したパスのコンポーネントの内容を表示することができます。
alias: '表示するコンポーネントのパス'
const router = new VueRouter({
routes: [
{
//エイリアスの設定
path: '/old-page',
component: oldPage,
alias: '/new-page'
},
{
path: '/new-page',
component: newPage
}
]
})
「~#/old-page」にアクセスすると、URLはそのままで、「~/#new-page」の内容を表示します。