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

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

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

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

JavaScript

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

962閲覧

セレクトボックスの値を変更した際のv-modelの挙動について

study_111

総合スコア82

Vue.js

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

JavaScript

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/07/16 01:19

編集2020/07/16 01:20

Vue.jsを学習中なのですが、セレクトボックスの挙動で疑問な点があります。

<template> <div> <div> <select v-model="eventData.location"> <option v-for="location in locations" :key="location">{{location}}</option> </select> <p>{{ eventData.location }}</p> </div> </div> </template> <script> import LikeHeader from './components/LIkeHeader'; import About from './components/About'; import Home from './components/Home'; export default { data() { return { number:14, currentComponent:'Home', locations:["東京","大阪","名古屋"], eventData:{ title:"", maxNumber:0, host:"", detail:"", isPrivate:false, target:[], price:"無料", location:"東京", } }; }, components:{ LikeHeader:LikeHeader, About:About, Home:Home, } }; </script>

こちらのコードのselect v-model="eventData.location"部分のlocationはdataメソッドのプロパティの「location」を指しており、v-for="location in locations"locationはdataメソッド内の「locations」配列の一つ一つの要素を指しているかと思います。
その為、2つには関連性が何もないかと思うのですが、セレクトボックスの値を変更すると、<p>{{ eventData.location }}</p>に表示される値がセレクトボックスに指定した値に変更されます。
こちらは何故このような挙動になるのでしょうか。
アドバイス頂けましたら幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

セレクトボックスの値を変更すると、<p>{{ eventData.location }}</p>に表示される値がセレクトボックスに指定した値に変更されます。

こちらは何故このような挙動になるのでしょうか。

まず、v-modelはv-bindとv-onを2個1にしたディレクティブです。
参考サイトを見ると

<input v-model="searchText"> <input :value="searchText" @input="searchText = $event.target.value">

となっているので、今回の場合は~~(雰囲気で書いてるので実際は違うかも)~~

<select v-model="eventData.location"> <select :value:"eventData.location" @change="eventData.location = $event.target.value"

と、こんな感じでイベントが発生した時に、eventData.locationの値を、<option>value</option>の値で上書きしているからです。

投稿2020/07/16 08:27

Arice_Banan

総合スコア60

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

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

study_111

2020/07/16 10:11 編集

ご回答ありがとうございます。 感覚的には、optionの値が変わった際(新たに値が選択された時)に、selectとoptionが関連づいているために、changeイベントが発生し、そのイベント発生したことにより指定された値が、eventData.locationに代入されるといった形でしょうか?
Arice_Banan

2020/07/20 00:22 編集

返答遅くなってごめんなさい。。。 そうです! 「:value:"eventData.location"」で「<select><option>・・・</option><select>」の値と紐づけて初期値を設定、 「@change="eventData.location = $event.target.value" 」で「eventData.location」に「select」の値を代入しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問