如何使用 Vue 从表单中获取所有数据
How do I get all data from a form using 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 天时间,但我不知道如何解决这个问题。
尝试使用计算变量。在你的 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
变量时,它都会自动更新。无需在提交时检查它,只需 v-model
它到您的隐藏输入,或直接使用 ajax
提交 selectedDays
变量
不确定 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
你试过了吗:
//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 数组
我有以下标记。
<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 天时间,但我不知道如何解决这个问题。
尝试使用计算变量。在你的 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
变量时,它都会自动更新。无需在提交时检查它,只需 v-model
它到您的隐藏输入,或直接使用 ajax
selectedDays
变量
不确定 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
你试过了吗:
//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 数组