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

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

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

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

Q&A

1回答

2803閲覧

vue.js selectした情報とv-modelの値が一致してない

Kimsehwa

総合スコア312

Vue.js

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

0グッド

0クリップ

投稿2020/03/07 22:03

編集2020/03/08 12:57
import selectType from "../src/components/selectType.vue"; document.addEventListener("DOMContentLoaded", e => { new Vue({ el: "#root", components: { "select-type": selectType } }); });

selectType.vue

<template lang="pug"> .select select(v-model="selected" :name="inputName" @change="changeType") option(v-for="option in options" :value="option.name", :key="option.id") p {{option.name}} h1 {{ selected }} </template> <script> data() { return { options [{ id: 1, name: 'student' },{ id: 2, name: 'manager' }] selected: "student", }; }, methods: { changeType(e) { this.selected = e.target.value; } } </script>

上記コードは
初回studentが選択されているセレクトフォームを表示してます。
この実装のためv-modelのselectedに初期値"student"を入れました。

そこからmanagerにセレクトフォームを変更して
ブラウザの前のページにボタンを押して以前のページに移動してから次のページを押して戻すと

セレクトフォームはmanagerのままですが、
v-modelの値はstudentです。
studentなのはおそらくdataの初期値を見てると思います。

ページを遷移しても選択された内容が変わらないのはブラウザの仕様だと思いますが、
この仕様に合わせてv-modelを更新するにはどうすればよいでしょうか。

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

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

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

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

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

guest

回答1

0

おそらく直接的な要因は v-for で繰り返し生成している <option> タグに同一の key を設定していることかと思います。

以下の修正で直るのではないでしょうか。

javascript

1return { 2 options [{ id: 1, name: 'student' },{ id: 2 /* ←修正 */, name: 'manager' }] 3 selected: "student", 4};

以下は pug の文法に自信がないので的外れかもしれません。

option タグの子要素に <p> タグを入れているように見えますが、option の子要素にはエスケープされた文字以外許可されていない ため、ブラウザによっては適切に動作しないかと思います。

投稿2020/03/08 02:07

R.Mizukami

総合スコア1086

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

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

Kimsehwa

2020/03/08 12:57

回答ありがとうございます。idは2でも駄目でした。。 なるほど、知らなかったです。pタグ外すようにします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問