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>
相关推荐
猩猩程序员31 分钟前
前端学习 AI Agent 开发
前端
Younglina1 小时前
打了3年羽毛球球才发现:我对自己的装备和胜率一无所知
前端·后端
风骏时光牛马1 小时前
Bash脚本高阶实战与常见报错完整代码案例详解
前端
kartjim1 小时前
我用 AI 一小时写了一个世界杯数据可视化平台|前端 VibeCoding 初体验
前端·程序员·ai编程
lichenyang4531 小时前
从一个 WebView Demo 开始,理解 ASCF 小程序底座到底在做什么
前端
牧艺1 小时前
用 Next.js 搭建 AI Agent 前端编排:从 Plan 到 SSE Trace 的完整实践
前端·agent
行者全栈架构师1 小时前
UniApp集成vk-uview-ui组件库详解:打造高效UI开发体验
前端·vue.js
林希_Rachel_傻希希1 小时前
js里面的proxy理解。以及vue3响应式数据设计底层
前端·javascript·面试
sunrains1 小时前
uniapp x 动态Tabbar(切换无闪烁)+动角标+主题切换+自定义tabbar页面导航栏样式设置 支持服务端动态配置根据角色动态设置Tabbar
前端
把马铃薯变成土豆1 小时前
前端Stripe跨境支付对接感想
前端·源码