Vue子组件调用父组件的三种方法(附详细代码演示)

 更新时间:2025年07月28日 10:05:01   作者:AL.千灯学长  
我们在使用vue做前端代码的时候,经常出现父组件调用子组件的场景需求,这篇文章主要介绍了Vue子组件调用父组件的三种方法,文中通过代码介绍的非常详细,需要的朋友可以参考下

一、组件通信背景

在Vue开发中,父子组件通信是常见需求。遵循单向数据流原则,子组件通常通过触发事件的方式与父组件交互。以下是3种常用方法:

二、方法实现

方法1:$emit触发自定义事件(推荐)

原理:子组件通过$emit触发事件,父组件通过v-on监听

<!-- 父组件 Parent.vue -->
<template>
  <Child @show-message="handleMessage" />
</template>

<script>
export default {
  methods: {
    handleMessage(msg) {
      console.log('收到子组件消息:', msg)
    }
  }
}
</script>

<!-- 子组件 Child.vue -->
<template>
  <button @click="sendMessage">发送消息</button>
</template>

<script>
export default {
  methods: {
    sendMessage() {
      this.$emit('show-message', 'Hello from Child!')
    }
  }
}
</script>

方法2:通过Props传递回调函数

原理:父组件通过props传递函数,子组件直接调用

<!-- 父组件 Parent.vue -->
<template>
  <Child :callback="handleCallback" />
</template>

<script>
export default {
  methods: {
    handleCallback(data) {
      console.log('回调数据:', data)
    }
  }
}
</script>

<!-- 子组件 Child.vue -->
<template>
  <button @click="executeCallback">执行回调</button>
</template>

<script>
export default {
  props: ['callback'],
  methods: {
    executeCallback() {
      this.callback({ status: 'success' })
    }
  }
}
</script>

方法3:使用v-model/.sync(双向绑定)

原理:通过双向绑定语法糖实现数据同步(Vue2/Vue3实现不同)

Vue2实现:

<!-- 父组件 Parent.vue -->
<template>
  <Child v-model="message" />
  <!-- 或 -->
  <Child :visible.sync="dialogVisible" />
</template>

<script>
export default {
  data() {
    return {
      message: '',
      dialogVisible: false
    }
  }
}
</script>

<!-- 子组件 Child.vue -->
<script>
export default {
  props: ['value'], // v-model默认prop
  methods: {
    updateValue() {
      this.$emit('input', 'new value')
    },
    closeDialog() {
      this.$emit('update:visible', false)
    }
  }
}
</script>

Vue3实现:

<!-- 父组件 Parent.vue -->
<template>
  <Child v-model:message="msg" />
</template>

<!-- 子组件 Child.vue -->
<script setup>
const props = defineProps(['message'])
const emit = defineEmits(['update:message'])

const update = () => {
  emit('update:message', 'new value')
}
</script>

三、方法对比

方法适用场景优点注意事项
$emit常规事件通信符合Vue设计模式,直观清晰事件名需保持一致
Props回调需要传递多个函数时类似React模式,灵活度高需注意函数引用稳定性
v-model表单组件/双向绑定需求语法简洁,减少代码量Vue2/Vue3实现方式不同
.sync修饰符多个prop需要双向绑定(Vue2特有)简化多个prop更新逻辑Vue3中已合并到v-model语法

四、最佳实践建议

  1. 优先使用$emit:符合Vue的事件驱动设计理念
  2. 复杂场景使用Vuex/Pinia:跨层级组件通信建议使用状态管理工具
  3. 注意版本差异
    • Vue2使用.sync需要显式声明
    • Vue3使用v-model:propName形式
  4. 保持单向数据流:避免直接修改父组件传递的props

五、常见应用场景

  1. 表单提交数据回传
  2. 模态框关闭控制
  3. 列表项状态更新
  4. 复杂组件的状态联动

到此这篇关于Vue子组件调用父组件的三种方法的文章就介绍到这了,更多相关Vue子组件调用父组件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue中如何动态获取剩余区域的滚动高度

    vue中如何动态获取剩余区域的滚动高度

    这篇文章主要介绍了vue中如何动态获取剩余区域的滚动高度问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Vue路由跳转方式区别汇总(push,replace,go)

    Vue路由跳转方式区别汇总(push,replace,go)

    vue项目中点击router-link标签链接都属于声明式导航。vue项目中编程式导航有this.$router.push(),this.$router.replace(),this.$router.go()​​​​​​​。这篇文章主要介绍了Vue路由跳转方式区别汇总(push,replace,go)
    2022-12-12
  • vue下载文件以及文件重命名方式

    vue下载文件以及文件重命名方式

    这篇文章主要介绍了vue下载文件以及文件重命名方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • vue3中v-model的用法详解

    vue3中v-model的用法详解

    vue 提供了很多自定义指令,大大方便了我们的开发,其中最常用的也就是 v-model,他可以在组件上使用以实现双向绑定。它可以绑定多种数据结构, 今天总结一下用法
    2023-04-04
  • Vue切换div显示隐藏,多选,单选代码解析

    Vue切换div显示隐藏,多选,单选代码解析

    这篇文章主要介绍了Vue切换div显示隐藏,多选,单选代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Vue中router-view无法显示的解决办法

    Vue中router-view无法显示的解决办法

    这篇文章主要给大家介绍了关于Vue中router-view无法显示的解决办法,router-view组件作为vue最核心的路由管理组件,在项目中作为路由管理经常被使用到,需要的朋友可以参考下
    2023-07-07
  • vue如何定义全局颜色变量并用js修改颜色三种方法

    vue如何定义全局颜色变量并用js修改颜色三种方法

    在Vue中定义一个全局变量是非常常见的需求,这样可以在多个组件中共享相同的数据,这篇文章主要介绍了vue如何定义全局颜色变量并用js修改颜色的三种方法,需要的朋友可以参考下
    2025-05-05
  • vue.js实现点击后动态添加class及删除同级class的实现代码

    vue.js实现点击后动态添加class及删除同级class的实现代码

    这篇文章主要介绍了vue.js实现点击后动态添加class及删除同级class的相关资料,需要的朋友可以参考下
    2018-04-04
  • vue实现图片上传预览功能

    vue实现图片上传预览功能

    这篇文章主要为大家详细介绍了vue实现图片上传预览功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • 前端vue+elementUI如何实现记住密码功能

    前端vue+elementUI如何实现记住密码功能

    这篇文章主要给大家介绍了关于vue+elementUI如何实现记住密码功能的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论