vue父子组件通信(一)父子调用和通信(2)VUE3

父组件调用子组件

同vue2

一、父 → 子:props

父组件传数据给子组件:

复制代码
<!-- 父组件 -->
<ChildComponent :message="hello" :count="5" />

<!-- 子组件 -->
<script setup>
const props = defineProps({
  message: String,
  count: Number
})
</script>

二、子 → 父:emit

子组件触发事件,父组件监听:

复制代码
<!-- 子组件 -->
<script setup>
const emit = defineEmits(['update', 'close'])

function handleClick() {
  emit('update', { value: 123 })
}
</script>

<!-- 父组件 -->
<ChildComponent @update="handleUpdate" />

<script setup>
function handleUpdate(data) {
  console.log(data.value) // 123
}
</script>

三、父访问子:expose + ref

父组件直接调用子组件的方法或访问数据:

复制代码
<!-- 子组件 -->
<script setup>
import { ref } from 'vue'

const count = ref(0)

function reset() {
  count.value = 0
}

defineExpose({ count, reset }) // 必须 expose 才能被父访问
</script>

<!-- 父组件 -->
<ChildComponent ref="childRef" />

<script setup>
import { ref } from 'vue'

const childRef = ref(null)

function callChild() {
  childRef.value.reset() // 调用子组件方法
}
</script>

升级写法:v-model(双向绑定语法糖)

本质是 props + emit 的封装,适合表单类组件:

复制代码
<!-- 父组件 -->
<ChildComponent v-model="value" />
<!-- 等价于 -->
<ChildComponent :modelValue="value" @update:modelValue="value = $event" />

<!-- 子组件 -->
<script setup>
defineProps(['modelValue'])
const emit = defineEmits(['update:modelValue'])

function onChange(val) {
  emit('update:modelValue', val)
}
</script>
相关推荐
码云之上5 分钟前
AI Agent 工程化总览篇:从 Prompt 到 Harness
前端·人工智能
2501_926978336 分钟前
以说明书 DNA 为模板——完整 AGI 的结构图景
前端·人工智能·经验分享·笔记·ai写作
IT_陈寒16 分钟前
Vite静态资源引用这个坑我踩得有点疼
前端·人工智能·后端
程序员黑豆1 小时前
鸿蒙应用开发:AttributeModifier 使用教程
前端·harmonyos
codeniu1 小时前
TRAE Work 实战 | 从"有个想法"到线上Demo,我全程只靠对话就完成了
前端·trae
妙码生花1 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(五十):增加管理员角色组管理
前端·后端·ai编程
飘尘1 小时前
一文讲清楚前端面试会问到的所有缓存
前端·javascript·面试
老王以为1 小时前
走进 AI Agent
前端·人工智能·架构
妙码生花1 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(五十一):管理员和角色组的关联
前端·后端·ai编程
ThsPool1 小时前
【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发
java·前端·javascript