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

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

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

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

Q&A

解決済

1回答

1631閲覧

【Vue.js】 optionに設定したv-bindの値が取れない。

yaenopikomaro

総合スコア2

Vue.js

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

0グッド

0クリップ

投稿2021/10/15 03:01

前提

こんにちは。Vue.jsの学習をしているプログラミング初心者です。
今、日付を選択するselect,期間を選択するselectと二つのseelctを作成して、そのそれぞれの選択結果を取得しシフト時間を入力できるカレンダーみたいなものを表示たいと思っています。

困っていることは期間のセレクトの値はとってこれたのですが、日付のセレクトでyear,month,dateの値をそれぞれバラバラに取得したくてv-bind値を以下のように設定しましたがReferenceErrorが出てしまいます。以下に該当のソースコードを張ります。

html

1<div class="timesheet" v-if="isTimeSheet"> 2 <select v-model="dateselect" @change="dateselect"> 3 <option key="">--選択してください--</option> //ここのoptionのyear,month,dateそれぞれ取得したい。 4 <option v-for="(date, index) in getdates" :key="index" :year="date.year" :month="date.month" :date="date.date">{{ date.text }}</option> 5 </select> 6 <select v-model="periodselect" @change="periodselect"> 7 <option value="">--選択してください--</option> 8 <option value="week">1週間</option> 9 <option value="twoweek">2週間</option> 10 <option value="month">1ヶ月</option> 11 </select> 12</div>

Vue.js

1export default { 2 data:function(){ 3 return{ 4 getdates:this.getdate() 5 } 6 }, 7 methods: { 8 active: function() { 9 this.isActive = !this.isActive; 10 }, 11 timesheet: function() { 12 this.isTimeSheet = !this.isTimeSheet; 13 }, 14 getdate: function() { 15 const today = new Date(); 16 const selectdates=[]; 17 const selectdate = today.getFullYear()+"年"+today.getMonth()+1+"月"+today.getDate()+"日"; 18 const week = ['日', '月', '火', '水', '木', '金', '土'] 19 for(let i = 1; i < 16; i++){ 20 //取得する日付の値を設定 21 let param = Date.now() + i * 86400000 22 //値から日付を取得 23 let date = new Date(param); 24 //dateから年月日曜を取得 25 let y = date.getFullYear(); 26 let m = date.getMonth()+1; 27 let d = date.getDate(); 28 let w = date.getDay(); 29 30 //月を2桁に揃える 31 if(m < 10){ m = '0'+m }; 32 //日を2桁に揃える 33 if(d < 10){ d = '0'+d }; 34 35 //出力形式 36 let textFormat = y+'年'+m+'月'+d+'日'+'('+week[w]+')'; 37 // let valueFormat = y+'-'+m+'-'+d; 38 selectdates.push({"text":textFormat,"year":y,"month":m,"date":d}); 39 } 40 console.log(selectdates); 41 return selectdates; 42 }, 43 dateselect :function(){ 44 console.log(this.selectedOption); 45 }, 46 periodselect:function(e){ 47 console.log(e.target.value); 48 }, 49 }, 50 computed:{ 51 selectedOption() { 52 const selected = this.getdates.find(date.year); //eferenceError: date is not definedと出ます。 53 return selected 54 } 55 } 56 }

初心者で質問の意図もコードもわかりづらいかと思いますがご教授いただければ幸いです。よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

:hoge は v-bind:hogeとしてコンポーネント間でデータのやり取りをするための制御なのでjQueryのdataプロパティのように使用しません。プルダウンでメンバも含め値を取得したい場合はv-bind:valueディレクティブで対応します。

この場合は`v-bind:value="date"としてからあとで算出プロパティsetterの引数からメンバを取得すればいいでしょう。

vue

1<select v-model="dateselect"> 2 <option key="">--選択してください--</option> //ここのoptionのyear,month,dateそれぞれ取得したい。 3 <option v-for="(date, index) in getdates" :key="index" :value="date">{{ date.text }}</option> 4</select> 5/*中略*/ 6 computed:{ 7 dateselect:{ 8    get(){ 9 let date = this.date //ここからsetterの値を引っ張ってくる 10       //console.log(date)で確認するとメンバを持っている状態になっているはず 11 const selected = this.getdates.find(date.year); //eferenceError: date is not definedと出ます。 12 return selected 13 }, 14 //プルダウンで選択した:valueの値 15 set(date){ 16 this.date = date 17 } 18 } 19}

それからプルダウンは算出プロパティだけで変化した値を検出できるので、二重でメソッドを書かないようにしましょう。

投稿2021/10/15 06:33

編集2021/10/15 07:20
FKM

総合スコア3644

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

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

yaenopikomaro

2021/10/15 07:12

ご丁寧にありがとうございました。直前にjQueryを学習していたものですから一緒になって考えてしまいました。無事に実装できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問