我们知道v-model
主要用于进行表单项(input、textarea、select)的输入绑定,本质上只是一个语法糖,它负责监听用户的输入事件以更新数据。
v-model
在内部为不同的输入元素使用不同的 property 并抛出不同的事件:
text
和textarea
元素使用value
property 和input
事件;checkbox
和radio
使用checked
property 和change
事件;select
字段将value
作为 prop 并将change
作为事件。
如何理解,我们看下面代码,对比直接使用官方 v-model
以及自定义实现 v-model
:
1 | <input type="text" v-model="msg" value="msg" /> |
然后我们来看一个完整示例:
可以看出,实现出来效果是一样的。(可以通过修改注释代码查看效果)
但是在使用 radio
和 checkbox
的时候,我们一般是以组的形式使用,我们一般不需要 checked 的值,而是需要 value 的值,这个时候我们可以这么使用:
1 | <label> <input type="checkbox" name="fruit" value="apple" v-model="cv" />苹果 </label> |
注意:checkbox组
得到的值是一个数组,而 radio组
得到的是单个值。
可以看出,针对radio组
和chackbox组
,我们一样可以通过自定义实现 v-model 的效果。
接下来,我们看看v-model
在自定义组件中的使用,以及对比其在 vue3 和 vue2 中的区别。请看下一篇文章:《深入理解v-model之自定义组件用法》