[TOC]
v-model 可以在组件上使用实现双向绑定。
首先让我们回忆一下 v-model 在原生元素上的用法:
<input v-model="searchText" />
在代码背后,模板编译器会对 v-model 进行更冗长的等价展开。因此上面的代码其实等价于下面这段:
<input
:value="searchText"
@input="searchText = $event.target.value"
/>
而当使用在一个组件上时,v-model 会被展开为如下的形式:
<CustomInput
:modelValue="searchText"
@update:modelValue="newValue => searchText = newValue"
/>
要让这个例子实际工作起来,<CustomInput>
组件内部需要做两件事:
- 将内部原生
<input>
元素的 value 属性绑定为modelValue
; - 当表单的
input
事件触发时,触发一个携带了新值的update:modelValue
自定义事件; ```vue
组件上的每一个 v-model 都会同步不同的 prop,而无需额外的选项: ```html
在下面的组件中,我们声明了`modelModifiers`这个属性,它的默认值是一个空对象: ```html
{{ modelValue }}
对于又有参数又有修饰符的 v-model 绑定,生成的 prop 名将是`arg + Modifiers`。举例来说:
```html
<my-input v-model:my-name.prefixer="myName" />
相应的声明是:
export default {
props: ['myName', 'myNameModifiers'],
emits: ['update:myName'],
created() {
console.log(this.myNameModifiers) // { prefixer: true }
}
}