質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

解決済

1回答

1101閲覧

Nuxt.jsでURLのパラメーターを元に動的に表示させたい

police

総合スコア14

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

1グッド

1クリップ

投稿2019/03/30 18:39

編集2019/03/31 06:35

PHPなどでよくやる「index.php?id=1」の1を変えて動的にページを表示させたいだけなのですが、Nuxt.js難しくてよくわかりません。

Nuxt.js + Express + axios
バージョンはすべて最新です。

URLのパラメーターを元にaxiosでMySQLからデータを引っ張ってきて表示させたいです。
例えば、MySQLで以下のようなTABLEがあったとします。

text

1id name 21 福沢諭吉 32 夏目漱石 43 野口英世 54 新渡戸稲造 65 樋口一葉

/server/api.js

JavaScript

1const express = require('express'); 2const router = express.Router(); 3const mysql = require('mysql2/promise'); 4 5const mysqlConfig = { 6 "host": "localhost", 7 "port": 3306, 8 "user": "root", 9 "password": "", 10 "database": "test" 11}; 12 13router.get('/fuga', async (req, res, next) => { 14 try { 15 const connection = await mysql.createConnection(mysqlConfig); 16 const sql = `SELECT name FROM hoge WHERE id = ?`; 17 const [rows] = await connection.query(sql, [req.query.id]); 18 connection.end(); 19 res.send(rows[0]); 20 } catch (err) { console.error(err); } 21}); 22 23module.exports = router;

/pages/index.vue

JavaScript

1<template> 2 <section> 3 id: {{$route.query.id}} &nbsp;&nbsp; name: {{name}} 4 <br> 5 <br> 6 <nuxt-link :to="{'path':'/', 'query':{'id':1}}">ID 1</nuxt-link><br> 7 <nuxt-link :to="{'path':'/', 'query':{'id':2}}">ID 2</nuxt-link><br> 8 <nuxt-link :to="{'path':'/', 'query':{'id':3}}">ID 3</nuxt-link><br> 9 <nuxt-link :to="{'path':'/', 'query':{'id':4}}">ID 4</nuxt-link><br> 10 <nuxt-link :to="{'path':'/', 'query':{'id':5}}">ID 5</nuxt-link><br> 11 </section> 12</template> 13 14<script> 15import axios from "axios"; 16 17export default { 18 async asyncData(context) { 19 const nameStr = await axios.get("http://localhost:3000/api/fuga", { 20 params: { 21 id: context.query.id 22 } 23 }); 24 return { name: nameStr.data.name }; 25 } 26}; 27</script> 28 29<style> 30body { 31 padding: 10px; 32} 33</style>

http://localhost:3000/?id=1 にアクセスすると、

id: 1 name: 福沢諭吉

ID 1
ID 2
ID 3
ID 4
ID 5

リンクになっているID 3をクリックすると

id: 3 name: 福沢諭吉

ID 1
ID 2
ID 3
ID 4
ID 5

本来「野口英世」になっていなければならないところが「福沢諭吉」のままです。

画面を遷移させるのではなくて再描画すればいいのかと、watchQueryなどいろいろいじったのですが、どうにもうまくいきません。

どのように書けばいいのでしょうか。。。

temmi-com👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決です。あまり納得いってませんが。

Nuxt.jsでは下記の書き方での動的表示に対応していないもようです。
/?id=1

マニュアルにあるようにこちらのパラメーターの書き方のみになるようです。
/1

なので、ディレクトリ構造を
/index.vue
ではなくて、
/_id/index.vue
にするだけで動的表示は実現できます。

パラメーターが複数、/1/fooなどでアクセスしたい場合は
/_id/_name.vue
となります。

とりあえず今はこちらでも構わないので、これにて閉めさせて頂きます。
でもちょっとダサッw

投稿2019/04/01 01:56

編集2019/04/15 01:22
police

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問