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

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

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

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

Q&A

解決済

1回答

1625閲覧

vue.js 予定の追加

syoyu

総合スコア13

Vue.js

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

0グッド

1クリップ

投稿2018/02/27 08:09

vue.jsでスケジュール管理アプリを制作しています。
storeを用いて、store内のデータを表示しています。予定を追加する際はmutationでstoreに追加しようとしています。
タイトル、予定日、開始時間、終了時間といったような複数のデータをstoreに追加する際に、mutationの関数では複数の引数をとることができなかったため、それぞれ入力した際にv-on:keyup.enterでstore内の空のデータに一旦入力されたものを入れる関数を行い、最後に追加ボタンでstore内のそれぞれ一旦入れておいたデータをlistにpushして、空のデータに戻すという関数を行っています。(説明へたくそですみません。多分↓のコードを見ればわかると思います。)
しかし、最終的にbuttonやpickerで入力させたりしたときにわざわざエンターを押させるのは面倒なので、最終的に追加ボタンを押すだけでうまく予定をstoreに追加できるようなやりかたはないでしょうか?
アプリを作るのは初めての初心者なので、コードは汚いし、知識もあまりありませんが、よろしければ教えていただけると幸いです。

store/mutation.js

js

1export const state = { 2events: [ 3 {title:'aaa', 4 date:'2018/2/10', 5 start:'8時', 6 finish:'17時', 7 }, 8 {title:'bbb', 9 date:'2018/2/15', 10 start:'9時', 11 finish:'16時', 12 }, 13], 14 15//一旦入れる入れ物 16 newPlanCostomer:'', 17 newPlanDate:'', 18 newPlanStart:'', 19 newPlanFinish:'', 20}; 21 22export const mutations = { 23 //一旦入れとくmethods 24 addCostomer(state,payload){ 25 state.newPlanCostomer = payload; 26 }, 27 28 addDate(state,payload){ 29 state.newPlanDate = payload; 30 }, 31 32 addStart(state,payload){ 33 state.newPlanStart = payload; 34 }, 35 36 addFinish(state,payload){ 37 state.newPlanFinish = payload; 38 }, 39 40 addPlan(state){ 41 state.events.push({ 42 title: state.newPlanCostomer, 43 date: state.newPlanDate, 44 start: state.newPlanStart, 45 finish: state.newPlanFinish, 46 }); 47 state.newPlanCostomer=''; 48 state.newPlanDate=''; 49 state.newPlanStart=''; 50 state.newPlanFinish=''; 51 },

addPlan.vue

html

1<div id="add"> 2 3 <p>施行日</p> 4 <p><input type="text" 5 v-model="newDate" 6 v-on:keyup.enter="addDate(newDate)"></p> 7 8 <p>開始時刻</p> 9 <p><input type="text" 10 v-model="newStart" 11 v-on:keyup.enter="addStart(newStart)"></p> 12 13 <p>終了予定時刻</p> 14 <p><input type="text" 15 v-model="newFinish" 16 v-on:keyup.enter="addFinish(newFinish)"></p> 17 18 <p>得意先</p> 19 <p><input type="text" 20 v-model="newCostomer" 21 v-on:keyup.enter="addCostomer(newCostomer)"></p> 22 23 24 <button v-on:click="addPlan()"> 25 追加 26 </button> 27 28 </div>

js

1import Vue from 'vue' 2import { mapState,mapMutations } from 'vuex' 3 4 export default{ 5 name: 'add', 6 7 data:function(){ 8 return{ 9 //v-modelの入れ物 10 newCostomer:'', 11 newDate:'', 12 newStart:'', 13 newFinish:'', 14 } 15 }, 16 17 computed:{ 18 ...mapState(['events','newPlanCostomer','newPlanDate','newPlanStart','newPlanFinish']), 19 }, 20 methods:{ 21 ...mapMutations(['addPlan','addCostomer','addDate','addStart','addFinish']), 22 } 23 } 24

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

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

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

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

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

guest

回答1

0

ベストアンサー

Componentにメソッドを足して、入力状態を送信するとうまくできるかと思います。
動かなかったらすみません。
addDate等のフォームの変更に合わせたstoreへのあたいの代入は不要です。

javascript

1... 2addPlan(state, payload){ 3 state.events.push({ 4 title: payload.newPlanCostomer, 5 date: payload.newPlanDate, 6 start: payload.newPlanStart, 7 finish: payload.newPlanFinish, 8 }); 9 }, 10...

html

1... 2 <button v-on:click="add()"> 3 追加 4 </button> 5</div>

javascript

1... 2methods:{ 3 ...mapMutations(['addPlan']), 4 add() { 5 this.addPlan({ 6 newPlanCostomer: this.newCostomer, 7 newPlanDate: this.newDate, 8 newPlanStart: this.newStart, 9 newPlanFinish: this.newFinish 10 }) 11 } 12 } 13}

投稿2018/02/27 08:53

編集2018/02/27 08:56
oligin

総合スコア138

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

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

syoyu

2018/02/27 09:54

回答ありがとうございました! 無事動きました。 なるほど、methodでv-modelを受け取れば良いのですね!勉強になりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問