vue2比较让人诟病的一点就是提供了两种双向绑定:v-model和.sync,
在vue3中,去掉了.sync修饰符,只需要使用v-model进行双向绑定即可。
为了让v-model更好的针对多个属性进行双向绑定(vue2中自定义组件中v-model只能使用一次),vue3做出了以下修改:
1、当对自定义组件使用v-model指令时,绑定的属性名由原来的value变为modelValue,事件名由原来的input变为update:modelValue:
<!-- vue2 -->
<ChildComponent :value="pageTitle" @input="pageTitle = $event" />
<!-- 简写为 -->
<ChildComponent v-model="pageTitle" />
<!-- vue3 -->
<ChildComponent
:modelValue="pageTitle"
@update:modelValue="pageTitle = $event"
/>
<!-- 简写为 -->
<ChildComponent v-model="pageTitle" />
vue3中子组件,关键代码
// 接受的属性值
let props = defineProps({
modelValue:{
type:String,
default:'',
}
});
// 触发方法
emits('update:modelValue','newValue')
去掉了.sync修饰符,它原本的功能由v-model的参数替代:
<!-- vue2 -->
<ChildComponent :title="pageTitle" @update:title="pageTitle = $event" />
<!-- 简写为 -->
<ChildComponent :title.sync="pageTitle" />
<!-- vue3 -->
<ChildComponent :title="pageTitle" @update:title="pageTitle = $event" />
<!-- 简写为 -->
<ChildComponent v-model:title="pageTitle" />
不要蒙圈,相当于在vue3中,v-model不加参数的情况就相当于给子组件传递了modelValue这个属性,除了这个属性外其余的都要加参数。
vue3中子组件,关键代码
// 接受的属性值
let props = defineProps({
title:{
type:String,
default:'',
}
});
// 触发方法使用'update:参数'
emits('update:title','newValue')