做前端页面的时候,经常会遇到form表单,单独写一堆input会让页面变得难看,这篇文章简单介绍一下vue中form表单的数据收集。
我们通过代码画出以下的表单数样式:
参考代码:
<div id="root">
<form >
账号:<input type="text"> </br> </br>
密码:<input type="password"> </br> </br>
性别:
男 <input type="radio" name="sex">
女 <input type="radio" name="sex"> </br> </br>
爱好:
唱跳 <input type="checkbox" >
rap <input type="checkbox" >
篮球 <input type="checkbox" >
<br></br>
所属校区
<select>
<option value="">请选择校区</option>
<option value="beijing">北京</option>
<option value="shanghai">上海</option>
<option value="shenzhen">深圳</option>
</select>
<br></br>
其他信息:
<textarea></textarea>
<br></br>
<input type="checkbox"> 阅读并结束<a href="">《用户协议》</a>
<br></br>
<button>提交</button>
</form>
</div>
1.信息收集
对于普通的input框,通过前面说的v-model就可以收集到想要的数据,比如改成下面这样:
账号:<input type="text" v-model='account'> </br> </br>
密码:<input type="password" v-model="pwd"> </br> </br>
....
new Vue({
el: '#root',
data: {
account:"", //用户名
pwd:"", //密码
},
})
对于单选框来说,因为v-model绑定的是value,而radio没有value值,所以不能直接使用上面这种方式获取值,我们通过绑定value值来获取单选框的内容,改成下面这样:
性别:
男 <input type="radio" name="sex" v-model='sex' value="male">
女 <input type="radio" name="sex" v-model='sex' value="female"> </br> </br>
对于check复选框,如果单纯的通过v-model绑定,那么绑定的值是true或者false,那么,我们也需要给绑定value值,而date里面的收集数据的类型要变成数组形式。参考下面
唱跳 <input type="checkbox" v-model='hobby' value="sing">
rap <input type="checkbox" v-model='hobby' value="rap">
篮球 <input type="checkbox" v-model='hobby' value="Basketball">
new Vue({
el: '#root',
data: {
account:"", //用户名
pwd:"", //密码a
sex:'male', //性别
hobby:[], //爱好
},
})
其他的信息比较简单,参考上面即可。
2.表单提交
我们上面收集完了数据,需要整理数据进行前台验证或者传到后台处理,但是上面定义的信息太散乱,我们考虑把数据定义成对象格式,然后点击按钮的时候进行输出。所有参考代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>vue测试</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>
<body>
<div id="root">
<form @submit.prevent="demo">
账号:<input type="text" v-model='userInfo.account'> </br> </br>
密码:<input type="password" v-model="userInfo.pwd"> </br> </br>
性别:
男 <input type="radio" name="sex" v-model='userInfo.sex' value="male">
女 <input type="radio" name="sex" v-model='userInfo.sex' value="female"> </br> </br>
爱好:
唱跳 <input type="checkbox" v-model='userInfo.hobby' value="sing">
rap <input type="checkbox" v-model='userInfo.hobby' value="rap">
篮球 <input type="checkbox" v-model='userInfo.hobby' value="Basketball">
<br></br>
所属校区
<select v-model="userInfo.city">
<option value="">请选择校区</option>
<option value="beijing">北京</option>
<option value="shanghai">上海</option>
<option value="shenzhen">深圳</option>
</select>
<br></br>
其他信息:
<textarea v-model.lazy="userInfo.other"></textarea>
<br></br>
<input type="checkbox" v-model="userInfo.agree"> 阅读并结束<a href="">《用户协议》</a>
<br></br>
<button>提交</button>
</form>
</div>
<script type="text/javascript">
new Vue({
el: '#root',
data: {
userInfo:{
account:"", //用户名
pwd:"", //密码a
sex:'male', //性别
hobby:[], //爱好
city:"", //所属城市
other:"", //其他信息
agree:"", //是否同意
}
},
methods:{
demo(){
console.log(JSON.stringify(this.userInfo))
}
}
})
</script>
</body>
</html>
效果:
3.vue自带的一些修饰符
v-model.trim //去除开头结尾空格
v-model.number //保证数据输入为数字
v-model.lazy //失去焦点再触发
上面这些修饰符主要是用来优化用户输入的,当然,如果你目前用的是前端组件,那么这些组件很多自带这些功能,也可以搭配vue一块使用。