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

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

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

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

Nuxt.js

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

Vuetify.js

Vuetify.jsは、マテリアルデザインを基本とするVue.jsのCSSフレームワークです。多くのマテリアルデザインのコンポーネントを提供しており、あらゆるアプリケーションに対応可能。vue-cli用テンプレートがあり、簡単にページを作成できます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1980閲覧

[Nuxt.js][Vuetify]詳細ウィンドウに一覧ページ時と同じデータ(文字列)を表示させたい

bardy

総合スコア3

Vue.js

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

Nuxt.js

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

Vuetify.js

Vuetify.jsは、マテリアルデザインを基本とするVue.jsのCSSフレームワークです。多くのマテリアルデザインのコンポーネントを提供しており、あらゆるアプリケーションに対応可能。vue-cli用テンプレートがあり、簡単にページを作成できます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/09/06 10:36

###解決したいこと
nuxt.jsとvuetifyを使って開発をしています。
一覧ページにある各詳細ボタンを押すと、各詳細ウィンドウが表示される機能を実装したいと考えています。
現在は、その機能をVuetifyのoverlayを使ってモーダルウィンドウのように表示されます。
ですが、1番目の詳細ボタンをクリックすると、最後(4番目)の文字列が表示されてしまいます。

一覧と詳細を同じ文字列が表示されるには、どのようにすれば良いでしょうか。もしくは、overlayではない他の方法が良いのでしょうか。

知識不足もあり、調べても分からなかったので、どなたか教えて頂きたいです。

###現在の状態

<template> <v-app> : : <v-main> <v-container> <v-row> <v-col v-for= "place in places" :key = "place" cols = "12" xs = "12" sm = "3" > <v-card justify = "space-around" > <v-card-text class="my-0 pa-2 black--text"> <div v-text= "place.ruby"></div> <div class = "text-h6" v-text = "place.place" > </div> </v-card-text> <v-divider class="my-2"></v-divider> <v-card-actions class ="justify-center"> <v-btn block color ="green white--text lighten-1" class ="ma-2" @click="overlay = !overlay" > 詳細 //この詳細ボタンを押すと詳細ウィンドウが表示される <br/> <v-icon>mdi-chevron-double-down</v-icon> </v-btn> </v-card-actions> <div @click ="overlay = false"> <v-overlay :value="overlay" > <v-container>                               //ウィンドウ内の表示内容 <v-row > <v-col > <v-card class ="white" width ="400" > <v-card-text class ="black--text"> <div v-text= "place.ruby"></div> <div class ="text-h6" v-text= "place.place" > </div> <div v-text = "adress.place></div> <v-divider class ="grey lighten-2 my-2"></v-divider> </v-card-text> <v-card-actions class ="justify-center"> <v-btn color ="success" class ="ma-5" @click="overlay = false" > close</v-btn> </v-card-actions> </v-card> </v-col> </v-row> </v-container> </v-overlay> </div> </v-card> </v-col> </v-row> </v-container> </v-main> </v-app> </template> <script> export default { data: () => ({ // modalwindow absolute: true, overlay: false, // output places: [ {id: '1', ruby: 'しょしゃぐりーんくらぶ', place: '書写グリーン倶楽部', adress: '兵庫県姫路市' }, {id: '2', ruby: 'おおくぼすいじょうごるふせんたー', place: '大久保水上ゴルフセンター', adress: '兵庫県明石市'}, {id: '3', ruby: 'ごるふぷらざこうべ', place: 'ゴルフプラザ神戸', adress: '兵庫県神戸市'}, {id: '4', ruby: 'あまがさきてくのらんど', place: '尼崎テクノランド', adress: '兵庫県尼崎市'} ] }), } </script>

一覧ページ

1番目の詳細を開いた状態

###補足
現在の詳細ページには、所在地のみが追加されていますが、まだ他にも追加で表示する予定です。
data内の「ruby」は、ルビ、つまり、ふりがなです。

###使用環境
Nuxt.jsバージョン
@nuxt/cli v2.15.8

Vue.jsバージョン
vue@2.6.14

Vuetifyバージョン
@nuxtjs/vuetify@1.12.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

places のループの中に v-overlay を書いているので、4つ( places の要素数分)オーバーレイが作らています。
overlaytrue になると4つのオーバーレイがすべて重ねて描画されて、見た目としては一番上にある最後のものだけが表示されるように見えています。

やり方はいろいろあると思いますが、オーバーレイを1つのみ表示するようにすればできると思います。

vue

1<template> 2 <v-app> 3 <v-main> 4 <v-container> 5 <v-row> 6 <v-col v-for="place in places" :key="place.id" cols="12" xs="12" sm="3"> 7 <v-card justify="space-around"> 8 <v-card-text class="my-0 pa-2 black--text"> 9 <div v-text="place.ruby"></div> 10 <div class="text-h6" v-text="place.place"></div> 11 </v-card-text> 12 <v-divider class="my-2"></v-divider> 13 14 <v-card-actions class="justify-center"> 15 <v-btn 16 block 17 color="green white--text lighten-1" 18 class="ma-2" 19 @click="selectedPlace = place" 20 > 21 詳細 22 <br /> 23 <v-icon>mdi-chevron-double-down</v-icon> 24 </v-btn> 25 </v-card-actions> 26 </v-card> 27 </v-col> 28 </v-row> 29 <div v-if="overlay" @click="selectedPlace = null"> 30 <v-overlay :value="overlay"> 31 <v-container> 32 <v-row> 33 <v-col> 34 <v-card class="white" width="400"> 35 <v-card-text class="black--text"> 36 <div v-text="selectedPlace.ruby"></div> 37 <div class="text-h6" v-text="selectedPlace.place"></div> 38 <div v-text="selectedPlace.address"></div> 39 <v-divider class="grey lighten-2 my-2"></v-divider> 40 </v-card-text> 41 <v-card-actions class="justify-center"> 42 <v-btn 43 color="success" 44 class="ma-5" 45 @click="selectedPlace = null" 46 > 47 close</v-btn 48 > 49 </v-card-actions> 50 </v-card> 51 </v-col> 52 </v-row> 53 </v-container> 54 </v-overlay> 55 </div> 56 </v-container> 57 </v-main> 58 </v-app> 59</template> 60 61<script> 62export default { 63 data: () => ({ 64 selectedPlace: null, 65 places: [ 66 { 67 id: '1', 68 ruby: 'しょしゃぐりーんくらぶ', 69 place: '書写グリーン倶楽部', 70 address: '兵庫県姫路市', 71 }, 72 { 73 id: '2', 74 ruby: 'おおくぼすいじょうごるふせんたー', 75 place: '大久保水上ゴルフセンター', 76 address: '兵庫県明石市', 77 }, 78 { 79 id: '3', 80 ruby: 'ごるふぷらざこうべ', 81 place: 'ゴルフプラザ神戸', 82 address: '兵庫県神戸市', 83 }, 84 { 85 id: '4', 86 ruby: 'あまがさきてくのらんど', 87 place: '尼崎テクノランド', 88 address: '兵庫県尼崎市', 89 }, 90 ], 91 }), 92 computed: { 93 overlay: function () { 94 return !!this.selectedPlace 95 }, 96 }, 97} 98</script>

投稿2021/09/06 13:03

aaharu

総合スコア441

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

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

bardy

2021/09/06 16:24

回答ありがとうございます! 確かに、表示場所が一つしかないので、overlayを内側に入れてしまうと4つが重なるということですね。 あと、overlay側のv-text要素が、「cannot read property " " of defined」などのエラーが出たので、 <div v-if= "selectedPlace" v-text = "selectedPlace.ruby" ></div> とそれぞれ書いたところエラーは消えました。 ですが、今度「Computed property "overlay" was assigned to but it has no setter. 」とエラーが出たので、調べているのですが、なぜか原因はわかりますでしょうか。
aaharu

2021/09/06 16:28

overlayをv-modelで使ってたり代入しようとしてますか?
bardy

2021/09/06 16:43

詳細ボタン側のclick要素を修正し忘れていました!すいません! 全部しっかり表示できるようになりました。ありがとうございます。 ちなみに、これを書けるようには、javascriptの勉強をもっとしたほうがいいんでしょうか。。。
aaharu

2021/09/07 02:15

質問されてる内容はVue.jsなのですが、Vue.jsの前にある程度HTML,JSになれておかないと躓きやすいんじゃないかと思いました。 いきなりVue.jsでVuetifyとなるとなにか良い参考やサンプルがないと難しいと思うのですが、パッとはよいサンプル思いつかないですね。
bardy

2021/09/07 06:07

そうですか、progateなんかはやったんですが、全然足りないですね。。。。 もっと精進します。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問