通过 defineModel,子组件无需再显式接收 props 和 emits,直接通过 defineModel 返回的 ref 对象即可实现双向绑定。<script setup lang="ts">
// 通过defineModel声明父组件传递过来的数据,返回一个ref对象
const user = defineModel<IUser>('user', {
default: {}
})
// 子组件可以直接修改刚刚通过defineModel声明的数据,不需要通过emits,父组件会自动更新
const ageAdd = () => {
user.value.age += 1
}
</script>修饰符与转换器在一些特殊场景下,我们可能还需要使用v-model的修饰符功能比如:清除字符串末尾的空格父组件添加修饰符<!-- 父组件 -->
<child v-model:userName.trim="userName" />子组件获取修饰符在子组件中,我们可以通过解构 defineModel() 的返回值,来获取父组件添加到子组件 v-model 的修饰符:// 通过defineModel声明父组件传递过来的数据,返回一个ref对象
const [user, filters] = defineModel<IUser>({
default: {},
set: (val) => {
console.log('set', val)
}
})修饰符格式默认格式为:第一个参数为props值,第二个参数为对应的修饰符(修饰符可能有多个,格式如下)
转换器处理数据当存在修饰符时,我们可能需要在读取或将其同步回父组件时对其值进行转换。我们可以通过使用 get 和 set 转换器选项来实现这一点:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。