v-model 是 vue 的双向绑定指令,本质是 v-bind:value 和 @input 的语法糖;它自动适配表单元素类型,支持 .lazy、.number、.trim 等修饰符,但不可与 :value 混用,且需避免绑定 undefined/null。

v-model 是 Vue 中最常用的数据绑定指令,专门用于表单元素实现“输入即更新、数据变即显示”的双向同步。它不是黑箱魔法,而是基于 v-bind:value 和 @input 的语法糖,用起来简洁,但理解底层逻辑才能避坑。
基础写法:一行代码搞定绑定
在 input、textarea、select 或 checkbox/radio 上直接使用 v-model="变量名" 即可:
- 确保该变量已在 Vue 实例的
data(Vue 2)或setup()中声明(Vue 3) - 不需要手动写
:value或监听@input,v-model 自动完成 - 例如:
<input v-model="username"><p>你输入的是:{{ username }}</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill1140" title="Vue"><img src="https://img.php.cn/upload/skill/000/000/081/178797612947731.jpg" alt="Vue" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/skill1140" title="Vue" class="overflowclass">Vue</a> <p class="overflowclass">避免 Vue 常见错误——响应式陷阱、ref 与 reactive 区别、计算属性时机及 Composition API 陷阱。</p> </div> <a rel="nofollow" href="/xiazai/skill1140" title="Vue" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div>
v-model 绑定不同表单元素的对应规则
它会根据元素类型自动适配行为,无需额外判断:
- text/number/email 等 input:绑定字符串或数字(配合 .number 修饰符可转为数值)
-
checkbox 单个:绑定布尔值(
true/false),选中即 true - checkbox 多个:绑定数组,选中的 value 值自动推入/移出该数组
- radio:绑定字符串,选中项的 value 赋给绑定变量
-
select 单选:绑定选项的 value 值(
<option value="apple">苹果</option>→ 绑定后变量为 "apple") - select 多选:绑定数组,选中多个 option 的 value 组成数组
常用修饰符解决实际小问题
加个点号就能优化体验,避免重复处理:
-
.lazy:把触发时机从
input改为change(失焦时才更新),适合搜索框防抖场景 -
.number:自动将输入内容
parseFloat(),空值转为 NaN,避免字符串拼接(如 1 + 2 变成 "12") - .trim:自动去除首尾空格,防止用户误输空格导致校验失败
必须避开的典型错误
看似合理,实则 Vue 会警告甚至失效:
- 不要同时写
v-model和v-bind:value(或:value),v-model 已包含 value 绑定 - 中文等输入法组合过程中(如拼音打字未上屏),
v-model不会实时更新;需实时响应请改用@input手动处理 - 不要给 v-model 绑定 undefined 或 null —— 初始化 data 时务必设为字符串、数组或布尔值(如
hobbies: []、agree: false)
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










