做前端页面的时候,经常会遇到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一块使用。

分类: 前端