Vue里面收集表单数据v-model

跟着视频学Vue,记录一些笔记~

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./vue.js"></script>
</head>

<body>
    <div id="root">
        <!-- @submit.prevent阻止form表单的默认提交 -->
        <form @submit.prevent="demo">
            <!-- label标签的for选项可以使用户名和输入框联系起来 -->
            <label for="account">用户名:</label>
            <!-- v-model.trim表示去掉用户名前后的空格 -->
            <input type="text" v-model.trim="userInfo.account" id="account">
            <br><br>
            密码:<input type="password" v-model="userInfo.password">
            <br><br>
            <!-- 年龄type="number"只准输入数字 v-model.number表示输入的数据类型为number类型 -->
            年龄:<input type="number" v-model.number="userInfo.age">
            <br><br>
            性别:<input type="radio" name="sex" value="male" v-model="userInfo.sex">男
            <input type="radio" name="sex" value="female" v-model="userInfo.sex">女
            <br><br>
            爱好:
            <input type="checkbox" value="study" v-model="userInfo.hobby">学习
            <input type="checkbox" value="eat" v-model="userInfo.hobby">吃饭
            <input type="checkbox" value="play" v-model="userInfo.hobby">玩耍
            <br><br>
            校区:
            <select v-model="userInfo.city">
                <option value="">请选择校区</option>
                <option value="beijing">北京</option>
                <option value="shanghai">上海</option>
                <option value="wuhan">武汉</option>
                <option value="shenzhen">深圳</option>
            </select>
            <br><br>
            其他信息:
            <!-- v-model.lazy表示不是实时收集,而是失去焦点的时候收集数据 -->
            <textarea v-model.lazy="userInfo.other"></textarea><br><br>
            <input type="checkbox" v-model="userInfo.agree">阅读并接受<a href="http://atguigu.com">《用户协议》</a>
            <button>提交</button>
        </form>
    </div>
    <script>
        new Vue({
            el: '#root',
            data: {
                userInfo: {
                    account: '',
                    password: '',
                    age: 18,
                    sex: '',
                    hobby: [], //多选框用数组搜集
                    city: 'beijing',
                    other: '',
                    agree: ''
                }
            },
            methods: {
                demo() {
                    // console.log(JSON.stringify(this._data)) //一般不直接获取_data属性,所以可以在外面包裹一层userInfo
                    console.log(JSON.stringify(this.userInfo))
                },
            },
        });

    </script>
</body>

</html>

收集表单数据:

1、若:input类型为text, <input type="text" >,则v-model收集的是value值,用户输入的就是value值。

2、若:input类型为radio,<input type="radio" name="sex" value="male" v-model="userInfo.sex">,则v-model收集的是value值,且要手动配置value值。

3、若:input类型为checkbox,<input type="checkbox" value="study" v-model="userInfo.hobby">

(1)没有配置input的value属性,那么收集的就是checked(勾选或者未勾选,是布尔值)

(2)配置了input的value属性:

a、v-model的初始值不是数组,那么收集的就是checked(勾选或者未勾选,是布尔值)

b、v-model的初始值是数组,那么收集的就是value值组成的数组(多选常用)

4、textarea多行文本输入,v-model收集的是输入的值,与lazy修饰符一同使用

备注:v-model的三个修饰符:

lazy:失去焦点再收集数据;

number:输入字符串转为数字类型

trim:去掉输入首尾空格

上一篇:store状态管理


下一篇:JDBC_03实现用户登录业务