Nuxt.jsで動的なroutingを設定する方法
Nuxt.jsで動的なroutingを設定する方法を紹介します。
Nuxt.jsで動的なroutingを設定する方法
動的なroutingを設定する方法には、二通りあります。
ファイル名に_をつける
上のように、pagesフォルダの中に、productsフォルダがあります。
その中に、「_id.vue」というファイルがあります。
このようにすることで、動的なrouteの設定がされたことになります。
URLは、products/
のあとに、1でもfooでもbooでも何でもOKです。
フォルダに_をつける
こちらがもう一つの方法です。
フォルダに、_をつけて、その中にindex.vueファイルを設置することで上と全く同じ動的なrouteのパラメーターを設定することができます。
また、こちらの方法では、動的なパラメーターのあとに、さらに続けてパラメーターを設定したいときに管理がしやすくなります。
たとえば、次のようなことが可能です。
動的なパラメーターのあとに、さらに続けてパラメーターを設定する
上のように、_idフォルダのなかに、さらにdetails.vueというフォルダを作成します。
すると、products/id/details
というurlでアクセスすることができます。
idの部分は動的に変化するので、idごとのそれぞれのdetailsを表示することができます。
template内でアクセスする方法
template内でアクセスするには、次のように、Vueの機能を使うことができます。
<template>
<div>ID: {{ $route.params.id }}</div>
</template>
上の場合、動的なrouteがidなので、paramsのあとはidになります。
ここがたとえば、_userというフォルダを作成しているのであれば、$route.params.user
になります。
id別ごとのページに遷移する方法
上のようなディレクトリ構造とします。
pages/products/index.vueに次のように記述します。
<template>
<div>
<h1>productsのindex.vue</h1>
<input type="text" v-model="productId">
<button @click="onLoadProduct">商品ページへ</button>
</div>
</template>
v−modelでproductIdという変数をセットして、入力された文字のIDを取得します。
そして、ボタンにrouterの設定をします。
<script>export default {
data() {
return {
productId: ''
}
},
methods: {
onLoadProduct() {
this.$router.push(`/products/${this.productId}`)
}
}
}</script>
上のようにすることで、リアクティブなproductIdが、v-modelによって取得されたIDを格納して、ボタンがクリックされることでonLoadProduct()メソッドでそのページに遷移することができます。