vue3.4中的v-model的用法~

1.首先以前我们针对父子组件传参是不是通过definePropsdefineEmits来实现的,但是这么 比较繁琐,因为他是单向传参,而不是双向的,这里我们要介绍的是vue3.4的v-model来实现双向数据传递。

2、代码示例:

javascript 复制代码
//父组件
<template>
    <Add ref="addForm" v-model="drawerStates.add"></Add>
</template>

import Add from './add.vue'
const addForm = ref(null)
const drawerStates = reactive({
  add: false
})

//子组件
//父组件使用 v-model="state" 时,这个 state 值会传递给 modelValue prop
const props = defineProps({
  modelValue: Boolean//这是 Vue 3 中 v-model 的默认 prop 名称
})
// 定义组件可以触发的事件
// 当子组件触发这个事件时,父组件的 v-model 值会更新
const emit = defineEmits(['update:modelValue'])
// 创建一个计算属性 drawerOpen,用于双向绑定
const drawerOpen = computed({
    //  从父组件获取当前值
  get() {
    return props.modelValue
  },
    // 通知父组件值的变化
  set(value) {
    emit('update:modelValue', value)
  }
})
//这样在子组件内部可以像使用普通 ref 一样使用 drawerOpen.value

3、工作流程:

  1. 当父组件 drawerStates.add 变化 → 自动更新 props.modelValue

  2. 当子组件修改 drawerOpen.value → 触发 update:modelValue → 父组件 drawerStates.add更新

4、为什么这么写?

  1. 实现真正的双向绑定,而不仅仅是单向数据流

  2. 保持组件状态与父组件同步

  3. 符合 Vue 3 的组件通信规范

  4. 使组件可以像原生表单元素一样工作

相关推荐
云飞云共享云桌面7 小时前
传统工作站 vs 云飞云共享云桌面:制造业设计云桌面选型深度对比
运维·服务器·前端·网络·3d·架构·制造
UXbot7 小时前
如何选择适合公司项目的UI设计工具?企业选型指南
前端·低代码·ui·团队开发·原型模式·设计规范·web app
llz_1128 小时前
web-第四次课后作业
前端·spring boot·web
武清伯MVP9 小时前
前端跨域方案大合集
前端·javascript
一杯奶茶¥9 小时前
基于springboot的失物招领管理系统带万字文档 校园失物招领管理系统 失物认领管理系统java springboot vue
java·vue.js·spring boot·java项目
小刘|9 小时前
Spring AI Alibaba 集成和风天气 API 实战
java·服务器·前端
星星在线9 小时前
我是怎么把页面图片流量砍掉一半的
前端·javascript
木叶子---10 小时前
前端打包出错
前端·人工智能·tensorflow
JAVA面经实录91710 小时前
前端系统化学习计划表(含完整知识思维导图)
前端·学习
本末倒置18311 小时前
开发了一个所见所得的md编辑器,致敬Typora大佬
前端