Vue3在组件上使⽤v-model
昨天看Vue的官⽅⽂档,怎么都不到之前在组件上使⽤v-model,然后组件同步取到值的⽅法。
后来回Vue 2的⽂档,再结合Vue 3的⽂档,终于发现,Vue 3移除了$listeners。
以前Vue 2是通过$listeners,传递两个pros值,label和value,⼦组件通过v-on绑定⼀个⽅法(通过计算属性),结合$listeners,再返回去。同时监听组件事件,把组件的值 ,通过$emits返回给⽗组件。
奥迪a5敞篷报价及图片⽗组件
<custom-input v-model="searchText"></custom-input>
Vue 2 ⼦组件
Vueponent('base-input',{
inheritAttrs:false,
props:['label','value'],
computed:{
inputListeners:function(){
syncvar vm =this
// `Object.assign` 将所有的对象合并为⼀个新对象
return Object.assign({},
// 我们从⽗级添加所有的
this.$listeners,
// 然后我们添加⾃定义,
// 或覆写⼀些的⾏为
{
// 这⾥确保组件配合 `v-model` 的⼯作
input:function(event){
vm.$emit('input', event.target.value)
}
}
)
}
},
template:`
<label>
{{ label }}
kds是什么意思<input
v-bind="$attrs"
v-bind:value="value"
v-on="inputListeners"
>
</label>
`
})
Vue 3移除了listeners,原因是现在事件是 $attrs 的⼀部分。
如何监听⼦组件的值呢?
⾮兼容:⽤于⾃定义组件时,v-model prop 和事件默认名称已更改:长春一汽4s店
prop:value -> modelValue;
event:input -> update:modelValue;
布加迪怎么样
⾮兼容:v-bind 的 .sync 修饰符和组件的 model 选项已移除,可⽤ v-model 作为代替;
由此可知,prop的 value 值已经改成modalValue,input 事件已改为update:modalValue。
上海大众新朗逸
Vue 3⼦组件
appponent('custom-input',{
props:['modelValue'],
emits:['update:modelValue'],
template:`
<input
:value="modelValue"
@input="$emit('update:modelValue', $event.target.value)"  >
`
})