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. 使组件可以像原生表单元素一样工作

相关推荐
漂流瓶jz6 分钟前
SourceMap数据生成核心原理:简化字段与Base64VLQ编码
前端·javascript·算法
桜吹雪10 分钟前
手搓一个简易Agent
前端·人工智能·后端
诸葛老刘30 分钟前
前端 css中的函数
前端·css
谢尔登35 分钟前
通用会话控制方案
前端·网络协议·tcp/ip·react.js·gitlab
惜茶40 分钟前
websocket操作入门
前端·javascript·websocket
摇滚侠1 小时前
Vue 项目实战《尚医通》,获取当前账户就诊人信息并展示出来,笔记42
前端·javascript·vue.js·笔记·html5
han_1 小时前
前端高频面试题之Vue-router篇
前端·vue.js·面试
C.果栗子2 小时前
Blob格式的PDF文件调用打印,浏览器文件打印(兼容)
前端·javascript·pdf
倚肆3 小时前
CSS 选择器空格使用区别详解
前端·css
盼哥PyAI实验室3 小时前
学会给网页穿衣服——学习 CSS 语言
前端·css·学习