Как получить все данные из формы с помощью Vue
У меня есть следующая разметка.
<div class="checkbox">
<label>
<input class="weekdays" name="wednesday[]" v-model="wed.selected" id="wednesday" type="checkbox"> Wed
</label>
</div>
<div class="checkbox">
<label>
<input class="weekdays" name="thursday[]" v-model="thu.selected" id="thursday" type="checkbox"> Thu
</label>
</div>
Аналогично для всех остальных дней недели. И в случае Vue:
new Vue({
el: '#provider',
data: {
mon: {selected: false, day: 'Mondays'},
tue: {selected: false, day: 'Tuesdays'},
wed: {selected: false, day: 'Wednesdays'},
thu: {selected: false, day: 'Thursdays'},
fri: {selected: false, day: 'Fridays'},
sat: {selected: false, day: 'Saturdays'},
sun: {selected: false, day: 'Sundays'},
weekends: {selected: false, day: 'Weekends'},
weekdays: {selected: false, day: 'Weekdays'},
fromTime: '',
toTime: '',
selectedDays:[{
days : [],
from: '',
to:''
}]
},
methods: {
addAvailability: function() {
if(this.mon.selected)
{
var days = [];
days.push(this.mon.day);
this.selectedDays['days'].push(days);
}
}
}
});
Но это, кажется, не работает. То, что я пытаюсь сделать здесь, когда я нажимаю на кнопку, Я хочу добавить все проверенные дни и время в переменную
selectedDays и добавить его в скрытое поле ввода (JSON сериализует данные).Но то, что я пробовал, не работает хорошо. Может ли кто-нибудь направить меня в нужное русло? Я провел 3 дня и не мог понять, как это сделать. исправить это.
3 ответов:
Попробуйте использовать вычисляемую переменную. В вашем компоненте vue:
Теперь каждый раз, когда вы обращаетесь к переменнойcomputed:{ selectedDays:function(){ var days = []; if(mon.selected) days.push('mon'); if(tues.selected) days.push('tues') //do for each day return days; } }selectedDays, она будет автоматически обновляться. Нет необходимости проверять его на-submit, простоv-modelего на ваш скрытый вход, или отправить переменнуюselectedDaysнепосредственно с помощью ajax
Вы пробовали:
//HTML <div id='example-3'> <input type="checkbox" id="jack" value="Jack" v-model="checkedNames"> <label for="jack">Jack</label> <input type="checkbox" id="john" value="John" v-model="checkedNames"> <label for="john">John</label> <input type="checkbox" id="mike" value="Mike" v-model="checkedNames"> <label for="mike">Mike</label> <br> <span>Checked names: {{ checkedNames }}</span> </div>И для js:
new Vue({ el: '#example-3', data: { checkedNames: [] } })Это прямо из документации. он будет помещать все значения выбранного флажка в массив chackedNames
Не уверен, для чего предназначены
weekendsилиweekdays, но вот рабочий пример
new Vue({ el: '#provider', data: { days: [ {name: 'Mondays', selected: false, from: '', to:''}, {name: 'Tuesdays', selected: false, from: '', to:''}, {name: 'Wednesdays', selected: false, from: '', to:''}, {name: 'Thursdays', selected: false, from: '', to:''}, {name: 'Fridays', selected: false, from: '', to:''}, {name: 'Saturdays', selected: false, from: '', to:''}, {name: 'Sundays', selected: false, from: '', to:''}, ], weekends: {selected: false, day: 'Weekends'}, weekdays: {selected: false, day: 'Weekdays'}, }, computed: { selectedDays: function() { return this.days.filter(function(item) { return item.selected; }); } } });<script src="https://unpkg.com/vue/dist/vue.js"></script> <div id="provider"> <div v-for="day in days"> <label :for="day.name"> <input type="checkbox" name="days" :id="day.name" :value="day.name" :checked="day.selected" v-model="day.selected"> {{day.name}} <input type="text" v-model="day.from"> <input type="text" v-model="day.to"> </label> </div> <hr> {{selectedDays}} </div>Еще примеры
Http://codepen.io/ctf0/pen/LbKYjg
Comments