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>
相关推荐
Setsuna_F_Seiei2 分钟前
前端的 AI 学习之路 01 之 Agent API 调用 - 和 Agent 的基础对话
前端·人工智能·ai编程
threerocks38 分钟前
AI 原生软件开发生命周期手册 - 如何借助 AI,逐阶段改造软件开发生命周期
前端·javascript·后端
徐小夕1 小时前
3分钟从想法到Agent上线:我们开源了一款AI可视化工作流“IDE”
前端·算法·github
ly76892 小时前
JavaScript 从入门到进阶:核心语法、异步编程与工程化实践
开发语言·javascript·ecmascript
why技术3 小时前
eli5,我觉得这个全网在吹的技能,使用体验真的很一般啊。
前端·人工智能·后端
excel3 小时前
记录升级 nuxt3 到 nuxt4 记录
前端
剑胆琴心静水深流3 小时前
全栈之路6---web集成与呈现
前端·vue.js·spring boot·分布式·spring·前端框架·npm
前端snow3 小时前
ai agent -- Memory汇总
前端
ITresearchGuest4 小时前
AI 焦虑下,前端该何去何从
前端·人工智能
沙盘客4 小时前
AFSIM 示例解读(03)· 六自由度飞行仿真 six_dof(下):机场运作与弹道导弹投送
java·javascript·经验分享