这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战html
这篇文章咱们来说一下v-model
的使用方法,以及在使用它的时候咱们须要注意的地方。vue
官方说,你能够用 v-model 指令在表单 <input>
、<textarea>
及 <select>
元素上建立双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。它负责监听用户的输入事件来更新数据,并在某种极端场景下进行一些特殊处理。markdown
v-model
在内部为不一样的输入元素使用不一样的 property 并抛出不一样的事件。app
input(type="text")元素使用 value
property 和 input
事件。以下:ide
<input type="text" v-model="value">
<textarea name="" id="" cols="30" rows="10" v-model="value"></textarea>
复制代码
如上所述代码,v-model
的做用就是:当input元素的值改变的时候绑定值value也会发生改变,当绑定值value改变时,input元素的value
值也发生对应的改变。oop
checkbox 和 radio 使用 checked
property 和 change
事件。以checkbox为例以下:post
<ol>
<li v-for="user in users" :key="user.name">
<input type="checkbox" :value="user.name" :id="user.name" v-model='checkedNames'>
<span>{{user.name}}</span>
</li>
</ol>
复制代码
const { createApp, ref } = Vue
const app = createApp({
setup() {
const checkedNames = ref([])
const users = ref([
{ name: '程咬金', checked: false },
{ name: '花木兰', checked: false },
{ name: '安琪拉', checked: false },
{ name: '李元芳', checked: false },
{ name: '貂蝉', checked: false },
])
return {
checkedNames,
users
}
}
})
const vm = app.mount("#app")
复制代码
按照上述渲染结果,咱们选择前三项的话,checkedNames
的值会变为:ui
Proxy {0: "程咬金", 1: "花木兰", 2: "安琪拉"}
复制代码
但其本质是<input type="checkbox" value="程咬金" id="程咬金">
对应的checked
值发生了变化。url
select 字段将 value
做为 prop 并将 change
做为事件。以下:spa
<select v-model="selected">
<option v-for="user in users">{{user}}</option>
</select>
复制代码
const { createApp, ref } = Vue
const app = createApp({
setup() {
const selected = ref()
const users = ref(['程咬金','花木兰','安琪拉','李元芳','貂蝉'])
return {
selected,
users
}
}
})
const vm = app.mount("#app")
复制代码
如上述代码,当selected
发生变化的时候,select
的value
值也发生了变化;反之,亦然。
v-model
在textarea
的使用方式同input type="text"
的状况。
默认状况下,组件上的 v-model
使用 modelValue
做为 prop 和 update:modelValue
做为事件。那么v-model
具体是怎么使用的呢?以下:
自定义组件 my-component
app.component('my-component', {
props: {
title: String
},
emits: ['update:title'],
template: ` <input type="text" :value="title" @input="$emit('update:title', $event.target.value)"> `
})
复制代码
使用
//简写
<my-component v-model:title="title"></my-component>
//使用 v-bind 全写
<my-component :title="title" @update:title="title=$event"></my-component>
复制代码
上述代码能够看出,咱们在使用的时候能够给组件传值,而当组件里的值发生变化的时候,又能够动态的更改咱们传入值的变量。
值得咱们注意的是,在Vue3中 v-model
的使用对比Vue2发生了很大的变化。
用于自定义组件时,v-model
prop 和事件默认名称已更改:
value
-> modelValue
;input
-> update:modelValue
;v-bind
的 .sync
修饰符和组件的 model
选项已移除,可用 v-model
做为代替。
如今能够在同一个组件上使用多个 v-model
进行双向绑定;
如今能够自定义 v-model
修饰符。
在Vue3中,咱们能够在同一组件上使用多个v-model
进行双向绑定。
通常在登录的时候咱们会使用修饰符来验证,固然根据你的需求能够在特定的地方使用修饰符,另外在Vue3中咱们也能够自定义修饰符。
v-model
咱们只用在元素input
、textarea
、select
和组件
上。