1,了解input绑定的v-model实质
v-model为表单元素输入的双向绑定,在input中
<input v-model="searchText">
等价于
<input
v-bind:value="searchText"
v-on:input="searchText = $event.target.value"
>
解释:
- 将输入框的值绑定到
searchText
变量上,这个是单向绑定,意味着改变searchText
变量的值可以改变input的value,但是改变value不能改变searchText
- 监听input事件(input输入框都有该事件,当输入内容时自动触发该事件),当输入框输入内容就单向改变
searchText
的值
这样就实现了双向绑定。
2,在组件上时使用v-model
当用在组件上时,v-model 同样可以理解为:
<custom-input v-model="searchText"></custom-input>
等价于
<custom-input
v-bind:value="searchText"
v-on:input="searchText = $event"
></custom-input>
为了让它正常工作,这个子组件内的 <input> 必须:
- 将其
value
特性绑定到一个名叫value
的prop
上 - 在其 input 事件被触发时,将新的值通过自定义的 input 事件抛出
写成代码之后是这样的:
Vue.component('custom-input', {
props: ['value'],
template: `
<input
v-bind:value="value"
v-on:input="$emit('input', $event.target.value)"
>
`
})
现在 v-model 就应该可以在这个组件上完美地工作起来了:
<custom-input v-model="searchText"></custom-input>
相关参考文章和出处
《Vue之自定义组件的v-model》
《vue 自定义组件使用v-model》