Vue.js中怎么使用v-model绑定表单?

来源:IPIPP.com作者:头衔:全栈工程师
导读:本期聚焦于小伙伴创作的《Vue.js中怎么使用v-model绑定表单?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Vue.js中怎么使用v-model绑定表单?》有用,将其分享出去将是对创作者最好的鼓励。

在Vue.js项目开发中,表单是用户与页面交互的重要载体,v-model指令可以帮我们轻松实现表单输入和应用状态之间的双向绑定,不需要手动监听输入事件再更新数据。下面我们就详细讲解不同表单元素下v-model的使用方法。

Vue.js中怎么使用v-model绑定表单?

基础文本输入框绑定

对于普通的文本输入框,包括单行输入框<input type="text">和多行文本域<textarea>,v-model会直接绑定输入框的value值,输入内容变化时对应的数据会自动更新。

<template>
  <div>
    <!-- 单行文本输入框 -->
    <label>用户名:</label>
    <input type="text" v-model="username" placeholder="请输入用户名">
    <p>当前输入的用户名:{{ username }}</p>

    <!-- 多行文本域 -->
    <label>个人简介:</label>
    <textarea v-model="intro" placeholder="请输入个人简介"></textarea>
    <p>当前输入的简介:{{ intro }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      username: '',
      intro: ''
    }
  }
}
</script>

单选框绑定

单选框通常成组出现,需要给同一组的单选框设置相同的name属性,v-model绑定同一个数据,选中的单选框的value值会赋值给绑定的数据。

<template>
  <div>
    <label>性别:</label>
    <input type="radio" id="male" value="男" v-model="gender">
    <label for="male">男</label>
    <input type="radio" id="female" value="女" v-model="gender">
    <label for="female">女</label>
    <p>当前选择的性别:{{ gender }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      gender: ''
    }
  }
}
</script>

多选框绑定

多选框分为单个多选框和多个多选框两种场景,单个多选框绑定布尔值,控制是否选中;多个多选框绑定数组,选中的选项的value会被添加到数组中。

<template>
  <div>
    <!-- 单个多选框 -->
    <input type="checkbox" id="agree" v-model="isAgree">
    <label for="agree">同意用户协议</label>
    <p>是否同意协议:{{ isAgree }}</p>

    <!-- 多个多选框 -->
    <label>爱好:</label>
    <input type="checkbox" id="read" value="阅读" v-model="hobbies">
    <label for="read">阅读</label>
    <input type="checkbox" id="sport" value="运动" v-model="hobbies">
    <label for="sport">运动</label>
    <input type="checkbox" id="music" value="音乐" v-model="hobbies">
    <label for="music">音乐</label>
    <p>当前选择的爱好:{{ hobbies }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isAgree: false,
      hobbies: []
    }
  }
}
</script>

下拉选择框绑定

下拉选择框分为单选和多选两种,单选时v-model绑定单个值,多选时需要给<select>添加multiple属性,v-model绑定数组。

<template>
  <div>
    <!-- 单选下拉框 -->
    <label>城市:</label>
    <select v-model="city">
      <option disabled value="">请选择城市</option>
      <option value="北京">北京</option>
      <option value="上海">上海</option>
      <option value="广州">广州</option>
    </select>
    <p>当前选择的城市:{{ city }}</p>

    <!-- 多选下拉框 -->
    <label>喜欢的课程:</label>
    <select v-model="courses" multiple>
      <option value="Vue.js">Vue.js</option>
      <option value="React">React</option>
      <option value="Angular">Angular</option>
    </select>
    <p>当前选择的课程:{{ courses }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      city: '',
      courses: []
    }
  }
}
</script>

v-model修饰符

v-model还提供了几个实用的修饰符,可以处理常见的输入场景:

  • .lazy:默认情况下v-model在input事件触发时同步数据,添加.lazy后会在change事件触发时同步,也就是输入框失去焦点或者按回车时才更新数据。
  • .number:自动将用户输入的值转为数值类型,如果无法转换则会返回原始值。
  • .trim:自动过滤用户输入的首尾空白字符。
<template>
  <div>
    <!-- .lazy修饰符 -->
    <input v-model.lazy="lazyText" placeholder="失去焦点后更新">
    <p>lazyText:{{ lazyText }}</p>

    <!-- .number修饰符 -->
    <input v-model.number="age" type="text" placeholder="输入数字">
    <p>age类型:{{ typeof age }}</p>

    <!-- .trim修饰符 -->
    <input v-model.trim="trimText" placeholder="自动去除首尾空格">
    <p>trimText:{{ trimText }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      lazyText: '',
      age: '',
      trimText: ''
    }
  }
}
</script>

v-model的本质

v-model其实是一个语法糖,它背后是v-bind绑定value属性和v-on监听input事件的组合。比如下面的两种写法效果是完全一致的:

<!-- v-model写法 -->
<input v-model="msg">

<!-- 等效的原生写法 -->
<input :value="msg" @input="msg = $event.target.value">

了解这个本质后,我们也可以自定义组件支持v-model绑定,只需要组件内部触发input事件并传递对应的值即可,这也是Vue.js组件通信的常用方式之一。

Vue.jsv-model表单绑定双向数据绑定表单元素修改时间:2026-06-02 04:40:20

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。