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

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

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

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

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

データバインディング

データソースと、アプリケーションやウェブページ(ウェブアプリケーション)のユーザインタフェースを静的または動的に結合する技術です。

Q&A

解決済

1回答

1727閲覧

【Vue × Firestore】v-forにてリスト化し、選択されたものをFirestoreにデータを格納されるようにしたいです。

TMTN

総合スコア53

Vue.js

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

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

データバインディング

データソースと、アプリケーションやウェブページ(ウェブアプリケーション)のユーザインタフェースを静的または動的に結合する技術です。

0グッド

0クリップ

投稿2021/04/16 03:18

編集2021/04/16 05:34

⑴v-forにてリスト化し、選択されたものをFirestoreにデータを格納されるようにしたいです。

現在VueとFirebaseにてポートフォリオを作成しているものです。

アクション〜戦争まで5つジャンルをセレクトボックスにて選ばれたものをFirestoreに格納したく、
今回、コードは下記のように作り実装を試みましたが、上手くFirestoreにデータが格納されませんでした。

selectタグにv-bindを入れないといけないのかなと思い入れてみましたが、上手くいかず
どうやったら上手く実現できるのか分からず困っています。

⑵セレクトボックスが選択されていない時、下記のような感じで「ジャンルを選択」と記載したいです。

また、現状セレクトボックスにてジャンルを選択していないのに、
一番上にあるアクションが勝手に選択されている状況になります。

セレクトボックスが選択されていない時、このような感じで「ジャンルを選択」と記載したいです。

<option class="post-item" value="好きなジャンル" hidden>ジャンルを選択</option>

分かる方いらっしゃいましたらお力添えをいただきたいです。

よろしくお願いいたいします。

実際のコードが下記になります。

HTML

1<select name="好きなジャンル"> 2 <option v-for="genre in genres" :value="genre.name":key="genre.id" class="post-item"> 3 {{ genre.name }} 4 </option> 5</select>

js

1 2<script> 3import firebase from "firebase"; 4 5export default { 6 data() { 7 return { 8 db: null, 9 genre: "", 10 genres: [ 11 { id: 1, name: "アクション" }, 12 { id: 2, name: "ドラマ" }, 13 { id: 3, name: "恋愛" }, 14 { id: 4, name: "ホラー" }, 15 { id: 5, name: "戦争" }, 16 ], 17 }; 18 }, 19 components: { 20 Header, 21 }, 22 methods: { 23 postItem() { 24 firebase 25 .firestore() 26 .collection("posts") 27 .add({ 28 title: this.title, 29 description: this.description, 30 image: this.image, 31 genre: this.genre, 32 time: firebase.firestore.FieldValue.serverTimestamp(), 33 //サーバ側で値設定 34 }); 35 }, 36}; 37</script>

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

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

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

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

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

guest

回答1

0

ベストアンサー

(1)v-forにてリスト化し、選択されたものをFirestoreにデータを格納されるようにしたいです。

問題を切り分けましょう。
「select要素で選択されたものを取得する」「Firestoreにデータを格納する」は別の問題です。
・ボタンが押されたとき、select要素で選択されたものを取得するだけのプログラム
・ボタンが押されたとき、Firestoreに固定値データを格納するだけのプログラム
を作ってみましょう。
それぞれが実現できることが確認できたら、それを組み合わせて「v-forにてリスト化し、選択されたものをFirestoreにデータを格納されるプログラム」を作りましょう。

(2)セレクトボックスが選択されていない時、下記のような感じで「ジャンルを選択」と記載したいです。

セレクトボックスを「選択されていない状態」にすると、空白が表示されます。
以下のように、1番目に「ジャンルを選択」のアイテムを置くのがよいと思います。

html

1<select name="好きなジャンル"> 2 <option class="post-item" value="好きなジャンル" hidden>ジャンルを選択</option> 3 <option v-for="genre in genres" :value="genre.name":key="genre.id" class="post-item"> 4 {{ genre.name }} 5 </option> 6</select>

投稿2021/04/16 12:59

ku__ra__ge

総合スコア4524

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

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

TMTN

2021/04/17 05:38

ご回答ありがとうございます。 ⑴につきまして、アドバイスいただきありがとうございます。 ・ボタンが押されたとき、Firestoreに固定値データを格納するだけのプログラムは実装できていますので、 ・ボタンが押されたとき、select要素で選択されたものを取得するだけのプログラムを考えてみます。 ありがとうございます。 ⑵につきましては、実装できました。 本当にありがとうございました。
TMTN

2021/04/17 08:34

記事までご提示頂き本当に助かります。 大変参考になります。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問