🔁 Vue 3 中父子组件双向绑定的 4 种方式

整理不易,点赞 + 收藏 + 关注,助你组件通信不再混乱!


✅ 场景说明

  • 父组件希望将某个值传递给子组件,同时希望子组件能够修改这个值(实现“绑定 + 反向更新”)。
  • 类似于 v-model 的使用效果。

🧩 方式一:使用 v-model + modelValue + emit("update:modelValue")

✅ 推荐:官方支持、语义清晰、适用于表单类组件

子组件写法:

<!-- components/MyInput.vue -->
<template><input :value="modelValue" @input="$emit('update:modelValue', $event.target.value)" />
</template><script setup>
defineProps({modelValue: String
})
defineEmits(['update:modelValue'])
</script>

父组件用法:

<MyInput v-model="username" />

🧩 方式二:自定义 v-model:xxx 实现多个绑定值

✅ 多值绑定场景适用,例如表单组件同时绑定 valuechecked

子组件:

<template><input:value="modelValue":checked="checked"@input="$emit('update:modelValue', $event.target.value)"@change="$emit('update:checked', $event.target.checked)"/>
</template><script setup>
defineProps(['modelValue', 'checked'])
defineEmits(['update:modelValue', 'update:checked'])
</script>

父组件:

<MyInput v-model:modelValue="text" v-model:checked="isChecked" />

🧩 方式三:使用 v-bind + @update + defineModel(Vue 3.3+)

⚠️ 仅支持 Vue 3.3 及以上版本!

子组件:

<script setup>
const model = defineModel<string>()  // 等价于 props + emit
</script><template><input :value="model" @input="model = $event.target.value" />
</template>

父组件:

<MyInput v-model="msg" />

✔️ 不用显式声明 props 和 emits,推荐新项目使用!


🧩 方式四:手动通过 props + emit 自定义字段实现绑定

✅ 适合非表单类组件 / 业务交互逻辑强的组件

子组件:

<template><button @click="toggle">{{ active ? 'ON' : 'OFF' }}</button>
</template><script setup>
const props = defineProps({ active: Boolean })
const emit = defineEmits(['update:active'])const toggle = () => {emit('update:active', !props.active)
}
</script>

父组件:

<MyToggle v-model:active="isActive" />

🧠 小结对比表

方式特点场景建议
v-model + modelValue最常用,官方推荐表单组件
v-model:xxx 多 model绑定多个值复合组件(如 input + checked)
defineModel()Vue 3.3+ 自动绑定新项目、轻量双绑组件
props + emit 自定义字段自定义灵活任意双向控制场景

✅ 补充:实现“子改父”但不一定是“绑定”

  • 子组件调用函数修改父组件数据:
<!-- 父组件 -->
<MyChild :value="count" @change="count = $event" /><!-- 子组件 -->
$emit('change', newValue)
  • 父传 ref,子组件直接修改 ref.value(不推荐频繁使用)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88681.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88681.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/88681.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阻有形,容无声——STA 签核之RC Corner

RC corner&#xff0c;RC指的是gate跟network的寄生参数&#xff0c;寄生参数抽取工具&#xff08;比如Starrc&#xff09;根据电路的物理信息&#xff0c;抽取出电路的电阻电容值&#xff0c;再以寄生参数文件&#xff08;Spef&#xff09;输入给STA工具&#xff08;PT&#x…

多代理系统(multi-agent)框架深度解析:架构、特性与未来

在人工智能技术迭代的浪潮中&#xff0c;多代理系统&#xff08;Multi-Agent System&#xff09;正从实验室走向产业应用的核心舞台。这一技术范式的崛起源于三大驱动力&#xff1a;大模型能力的指数级提升、复杂任务分解的需求爆发&#xff0c;以及传统单体智能架构的局限性日…

【Redis】黑马点评笔记:使用redis解决各种分布式/并发问题

1、系统架构2、基于session登录用户的 session 是由服务器&#xff08;如 Tomcat&#xff09;自动管理和维护的&#xff0c;每个用户在访问 Web 应用时都会拥有一个独立的 session 对象。这个对象是通过浏览器和服务器之间的 HTTP 协议自动绑定的。1. 如何区分不同用户的 Sessi…

Javaweb- 11 MVC架构模式

MVC&#xff08;Model View Controller&#xff09; 是软件工程中一种软件架构模式&#xff0c;它把软件系统分为模型&#xff0c;视图&#xff0c;控制器&#xff0c;三个基本部分。用一种业务逻辑&#xff0c;数据&#xff0c;界面显示分离的方法组织代码&#xff0c;将业务逻…

【电脑】主板的基础知识

主板&#xff08;Motherboard&#xff09;是计算机的核心组件之一&#xff0c;它将所有其他硬件部件连接在一起并协调它们的工作。以下是关于主板的详细知识&#xff1a;1. 架构组成一个典型的主板通常由以下几个主要部分构成&#xff1a;芯片组&#xff08;Chipset&#xff09…

【飞算JavaAI】一站式智能开发,驱动Java开发全流程革新

【作者主页】Francek Chen 【专栏介绍】⌈⌈⌈人工智能与大模型应用⌋⌋⌋ 人工智能&#xff08;AI&#xff09;通过算法模拟人类智能&#xff0c;利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络&#xff08;如ChatGPT&#xff09…

STM32中的RTC(实时时钟)详解

前言&#xff1a;为什么需要RTC&#xff1f; 在嵌入式系统中&#xff0c;时间记录是一项基础且关键的功能。想象一下&#xff1a;智能家居设备需要按时间触发开关灯&#xff0c;工业仪表需要记录传感器数据的采集时刻&#xff0c;物联网终端需要同步服务器时间戳……这些场景都…

Python技巧记录

空格拼接数组格式化显示 一维数组 arr [1, 2, 3, 4, 5] print( .join(map(str, arr))) # 直接转换并连接二维数组 for row in arr:print( .join(map(str, row)))for row in arr: 此循环会遍历矩阵arr中的每一行。这里的arr是一个二维列表&#xff0c;每一行代表一个子列表。m…

next.js打包后的前端资源如何进行部署和访问,为什么没有index.html

在 Next.js 项目中&#xff0c;打包后的部署方式和传统单页应用&#xff08;SPA&#xff09;有所不同&#xff0c;尤其是没有直接生成 index.html 这一点。以下是详细解释和部署指南&#xff1a;为什么没有 index.html 文件&#xff1f; Next.js 采用 混合渲染策略&#xff0c;…

Qt+FFmpeg网络视频流播放

init 函数用于初始化 FFmpeg&#xff0c;包括设置参数、打开输入、初始化视频和音频等。initOption 函数用于设置 FFmpeg 的参数选项。bool FFmpegThread::init() {if (url.isEmpty()) {return false;}//判断该摄像机是否能联通if (checkConn && isRtsp) {if (!checkUr…

【SpringBoot】Spring Boot 高并发优化终极指南,涵盖线程模型、JVM 调优、数据库访问、缓存策略等 15+ 核心模块

Spring Boot 高并发优化终极指南&#xff0c;涵盖线程模型、JVM 调优、数据库访问、缓存策略等 15 核心模块一、线程模型深度调优&#xff08;核心瓶颈突破&#xff09;1. Tomcat 线程池原子级配置2. 异步任务线程池隔离策略二、JVM 层终极调参&#xff08;G1GC 深度优化&#…

linux(CentOS-7-x86_64:NAT模式下解决yum无法使用:更新yum源的详细操作步骤2025)

目录 一、CentOS-7-x86_64的NAT模式下解决yum无法使用。&#xff08;更新可用的yum&#xff09; &#xff08;1&#xff09;首先保证能够ping通&#xff0c;也就是NAT模式下虚拟机有网络。 &#xff08;2&#xff09;错误&#xff1a;无法使用yum。比如我现在无法yum search if…

C++11的整理笔记

Lambda 表达式Lambda 表达式是 C11 引入的一种强大的功能&#xff0c;它允许你在代码中直接定义匿名函数对象。Lambda 表达式可以捕获上下文中的变量&#xff0c;并在需要时使用它们。它们通常用于简化代码&#xff0c;尤其是那些需要传递函数对象作为参数的场景&#xff08;如…

MS1826+MS9332 4K@30Hz HD4×2视频分割器

MS1826MS9332是一款支持4K30Hz分辨率的HD42视频分割器方案。支持四路HD输入两路HD输出&#xff0c;最高支持4K30Hz分辨率。该方案具有Scaler、OSD、画面分割、无缝切换、淡入淡出及旋转等功能。该方案现已实现量产&#xff0c;并提供完善的技术支持&#xff0c;适用于各类高清视…

用 MATLAB 模拟传染病传播:从 SI 模型到 SIS 模型的可视化之旅

在公共卫生研究中&#xff0c;数学模型是理解传染病传播规律的重要工具。通过数值模拟&#xff0c;我们能直观看到 “易感人群” 和 “感染人群” 随时间的变化趋势&#xff0c;甚至能预测疫情发展的关键节点。今天就带大家用 MATLAB 实现两个经典的传染病模型 ——SI 模型和SI…

Ruby如何采集直播数据源地址

在当今数字化的时代&#xff0c;实时获取并处理信息变得尤为重要。特别是在体育赛事、新闻报道等领域&#xff0c;及时获取最新的直播数据源对于提升用户体验至关重要。本文将介绍如何使用Ruby语言来采集特定网站的数据源地址 一、准备工作 首先&#xff0c;确保你的环境中已…

【fitz+PIL】PDF图片文字颜色加深

文章目录0 引言1 解决思路及流程1.1 思路1.2 代码实现2 完整代码与效果3 总结0 引言 没错&#xff0c;这是连续剧。女友对上一篇【fitzOpenCV】去除PDF图片中的水印得到的去水印效果很满意&#xff0c;于是问我可不可以再帮她处理一下另一个PDF文件&#xff0c;我二话不说答应…

tp8.0\jwt接口安全验证

环境&#xff1a;php8.3\tp8.1\firebase-jwt6.1app\middleware\JwtAuth<?php namespace app\middleware;use app\common\library\JwtHandler; use think\Request; use think\facade\Env;class JwtAuth {public function handle(Request $request, \Closure $next){// 获取当…

ReactNative【实战系列教程】我的小红书 5 -- 文章详情(含轮播图 ImageSlider,点亮红心动画 Heart,嵌套评论等)

最终效果 安装依赖 npm i dayjs用于对时间进行格式化 必备组件 轮播图 ImageSlider https://blog.csdn.net/weixin_41192489/article/details/149224510 点亮红心动画 Heart components/Heart.tsx import AntDesign from "expo/vector-icons/AntDesign"; import …

哔哩哔哩第三方TV-BBLL最新版

—————【下 载 地 址】——————— 【​本章下载一】&#xff1a;https://pan.xunlei.com/s/VOUtUcaymd9rpgurgDKS9pswA1?pwdp76n# 【​本章下载二】&#xff1a;https://pan.xunlei.com/s/VOUtUcaymd9rpgurgDKS9pswA1?pwdp76n# 【百款黑科技】&#xff1a;https://uc…