Nuxt.jsをはじめよう - クエリパラメータやパスパラメータを使ってデータを渡す
前回の記事 では画面遷移の仕方を紹介しました。 画面間でデータのを受け渡しをする方法を紹介します。Nuxt.js というか Vue.js の仕様も含まれています。
画面間でデータを渡す
画面間でデータの受け渡しをする方法はいくつかあります。URLのクエリパラメータで渡す方法やパスパラメータによる方法、またフレームワーク側でデータを保持する方法などです。Nuxt.js においてこれらのやり方をまとめてみました。
クエリパラメータを使う
URLのクエリパラメータとしてデータを取得したい場合には $route
オブジェクトの query
プロパティから取得ができます。
以下のように pageName=next
というデータを nuxt-link
から渡します。
1<nuxt-link to="/next?pageName=next" > Go to Next</nuxt-link>
データを受け取る側では <template>
ブロック内で $route.query.パラメータ名
によってデータを取得できます。
1<template>
2<div>
3 <div>
4 {{ $route.query.pageName }}
5 </div>
6</div>
7</template>
また、 <script>
ブロック内でクエリパラメータを取得したい場合には context
オブジェクトから取得することも可能です。
1<script>
2export default {
3 asyncData (context) {
4 console.log(context.query.pageName)
5 },
6 fetch(context) {
7 console.log(context.query.pageName)
8 }
9}
10</script>
パスパラメータを使う
次にURLのパスパラメータを使う方法です。Nuxt.js では pages
ディレクトリ配下のファイルパスがそのままページのURLとして採用されます。
しかし、ファイル名やディレクトリ名を アンダースコアはじまりの名前で指定する
と、動的なパラメータであると認識してくれるのです。
例えば、 pages
ディレクトリ配下に _id/index.vue
ファイルを作成します。
_id
はアンダースコアはじまりなので、ここが動的なパスパラメータとなります。
./pages
└── _id
└── index.vue
_id/index.vue
内の <template>
ブロックから参照するには $route.params.パラメータ名
で指定します。
1<template>
2 <div>
3 ID is {{ $route.params.id }}
4 </div>
5</template>
<script>
ブロック内でクエリパラメータを取得したい場合には context
オブジェクトから取得することも可能です。
1<script>
2export default {
3 asyncData (context) {
4 console.log(context.params.id)
5 },
6 fetch(context) {
7 console.log(context.params.id)
8 },
9}
10</script>