使用v-model收集表单数据

本文总结了在使用v-model收集表单数据时的一些关键细节,特别是在处理单选按钮(<input type='radio'>)和复选框(<input type='checkbox'>)时。未设置value值会导致无法正确获取选中状态。对于单选按钮,需要配置value值;对于复选框,未配置value值时收集的是勾选状态,配置后,v-model初始值非数组时收集的仍是勾选状态,而初始值为数组则收集数组值。v-model还可以配合lazy、number和trim修饰符进行延迟收集、转换数字和去除首尾空格。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用v-model收集表单数据需要注意一些细节,本篇就小小总结一下

看代码

<!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>Document</title>
    <!-- 引入vue框架 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.10"></script>
</head>

<body>
    <div id="root">
        <form @submit.prevent="demo">

            账号:<input type="text" v-model.trim="account"><br>
            密码:<input type="password" v-model="password"><br>
            性别:
            男:<input type="radio" name="sex" v-model="sex" value="male">
            女:<input type="radio" name="sex" v-model="sex" value="female"><br>
            爱好:
            学习<input type="checkbox" v-model="hobbies" value="study">
            吃饭<input type="checkbox"  v-model="hobbies" value="eat">
            打游戏<input type="checkbox"  v-model="hobbies" value="game"><br>
            所属校区:<select v-model="city">
                <option value="">请选择校区</option>
                <option value="beijing">北京</option>
                <option value="shanghai">上海</option>
                <option value="liuzhou">柳州</option>
            </select><br>
            其他信息:
            <textarea v-model.lazy="other" ></textarea>
            <br>
             <input type="checkbox" v-model="agreen">阅读并接受用户协议<a href="http://www.baidu.com">《用户协议》</a>
             <br>
             <button>提交</button>
        </form>
    </div>
    <script>
        let vm = new Vue({
            el: '#root',
            data: {
                account:'',
                password:'',
                sex:'female',
                hobbies:[],
                city:'beijing',
                other:'',
                agreen:''
            },
            methods: {
                demo(){
                    console.log(JSON.stringify(this._data));
                }
            },
        })
    </script>
</body>

</html>

这是完整的实现了功能的代码片段,效果如下

 在使用v-model实现双向数据绑定的时候发现

如果性别那部分的代码没有设置value值,即

性别:

            男:<input type="radio" name="sex" v-model="sex" >

            女:<input type="radio" name="sex" v-model="sex" ><br>

此时的效果是这样的,获取不到勾选的值,所以要在标签上加上value值

 如果爱好那部分的代码是没有value值的

 爱好:

            学习<input type="checkbox" v-model="hobbies"  >

            吃饭<input type="checkbox"  v-model="hobbies"  >

            打游戏<input type="checkbox"  v-model="hobbies"  ><br>

 效果如下

 因此我们要配置一个value值,但是如果有了value值,v-model的初始值不是数组,即

效果如下

当配置有value值的时候,且v-model绑定的值是一个数组的时候可以拿到value的值

效果

 

 小小总结一波:

若:<input type="text">,使用v-model收集的是value的值,用户输入的值就是value值,
若:<input type="radio">,使用v-model收集的值也是value值,但是这个是单选框,没有输入值,所以要给标签配置value值;
若:<input type="checkbox">,使用v-model分为两种情况:(1)没有配置input的value属性,那么收集的就是checked(勾选或者不勾选,是一个布尔值);(2)配置input的value属性:v-model的初始值不是数组,那么收集的还是checked(勾选或者不勾选,是一个布尔值),如果v-model的初始值是数组,那么收集的就是数组的值
v-model有三个修饰符:lazy:失去焦点在收集数据;number:输入的字符串转为有效数字;trim:输入首尾空格过滤。

### 使用 `v-model` 进行数据绑定和收集表单数据 #### 基础概念 在 Vue 中,`v-model` 是用于创建双向数据绑定的语法糖。它简化了模板内的输入控件与应用状态之间的连接过程[^2]。 #### 实现机制 通过 `Watcher` 对象来监听被绑定的数据变化,并依据 Compile 制定的更新策略自动同步视图和模型的状态,从而达到双向绑定的效果[^5]。 #### 表单项支持 `v-model` 可应用于多种类型的 HTML 输入元素,包括但不限于文本框、多行文本域、复选框、单选按钮以及选择器等[^4]。 #### 示例代码 下面是一个简单的例子展示如何利用 `v-model` 来实现基本的表单字段到组件内部 state 的映射: ```html <!-- 组件模版 --> <div id="app"> <!-- 文本框 --> <input type="text" v-model="message"> <!-- 显示消息 --> <p>Message is: {{ message }}</p> <!-- 多行文本 --> <textarea v-model="longText"></textarea> <!-- 单选按钮组 --> <div> Gender: <label><input type="radio" value="male" v-model="gender"> Male</label> <label><input type="radio" value="female" v-model="gender"> Female</label> </div> <!-- 下拉菜单 --> <select v-model="selectedOption"> <option disabled value="">请选择...</option> <option>A</option> <option>B</option> <option>C</option> </select> </div> ``` ```javascript // JavaScript 部分 new Vue({ el: '#app', data() { return { message: '', longText: '默认值...', gender: '', // 默认为空字符串表示未选中任何选项 selectedOption: '' } } }) ``` 此示例展示了不同种类的表单控件是如何借助 `v-model` 属性轻松地与其对应的 Vue 实例上的属性建立联系并实时反映其最新状态的变化情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值