Vue3 v-model 组件中的使用
当我们需要自己封装一个组件的时候 我们再组件上使用v-model
<home v-model="name"></home>
相当于
<home :modelValue="name" @update:modelValue="name=$event"></home>
当然组件中需要将modelValue
绑定到props中, 同时定义自定义事件抛出
一般写法如下:
<input type="text" :value="modelValue" @input="inputChange">
props:["modelValue"],
emits:["update:modelValue"],
methods:{
inputChange(event) {
this.$emit("update:modelValue", event.target.value);
}
}
我们可以发现input
上的写法其实和v-model
类似,但是我们不能直接将modelValue
绑定
<input type="text" v-model="modelValue">
上述的写法会有问题,并不能和父组件双向绑定,而且我们也尽量不直接修改props中的值
computed 写法如下:
需要一个新的值来绑定 这里就命名为value
<input type="text" v-model="value">
computed:{
value:{
//在设置值的发出一个自定义事件
set(value) {
this.$emit("update:modelValue", value)
},
get() {
return this.modelValue
}
}
},
另外vue3 组件也可以设置多个 v-model
了(vue2是.sync
), 默认的 v-model
会命名为modelValu
我们可以通过v-model:xxx
来自己命名, 但是要注意事件取名格式为 @update:xxx