当前位置: 首页 > ai >正文

Vue3 + JavaScript 父组件点击按钮触发子组件事件方法

在 Vue 3 中,父组件点击按钮触发子组件事件有以下三种常用方式:

方法 1:使用 ref 直接调用子组件方法(推荐)

vue

复制

下载

<!-- 父组件 -->
<template><button @click="callChildMethod">父组件按钮</button><ChildComponent ref="childRef" />
</template><script setup>
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';const childRef = ref(null);function callChildMethod() {if (childRef.value) {childRef.value.childMethod(); // 直接调用子组件方法}
}
</script>

vue

复制

下载

<!-- 子组件 ChildComponent.vue -->
<script setup>
// 暴露给父组件的方法
const childMethod = () => {console.log('子组件方法被调用');// 执行子组件逻辑
};// 暴露方法给父组件
defineExpose({childMethod
});
</script>

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

vue

复制

下载

<!-- 父组件 -->
<template><button @click="triggerChild">父组件按钮</button><ChildComponent :parentCallback="callback" />
</template><script setup>
import ChildComponent from './ChildComponent.vue';const callback = () => {console.log('父组件的回调函数被执行');
};function triggerChild() {// 通过触发子组件事件间接执行// 实际执行逻辑在子组件内
}
</script>

vue

复制

下载

<!-- 子组件 -->
<template><!-- 接收父组件传递的回调 -->
</template><script setup>
const props = defineProps(['parentCallback']);// 子组件内执行回调
function executeParentCallback() {if (props.parentCallback) {props.parentCallback();}
}// 暴露方法供父组件调用
defineExpose({ executeParentCallback });
</script>

方法 3:使用自定义事件(子组件触发)

vue

复制

下载

<!-- 父组件 -->
<template><button @click="emitEvent">父组件按钮</button><ChildComponent @child-event="handleEvent" />
</template><script setup>
import ChildComponent from './ChildComponent.vue';function emitEvent() {// 触发自定义事件(实际由子组件监听)
}function handleEvent(data) {console.log('收到子组件事件:', data);
}
</script>

vue

复制

下载

<!-- 子组件 -->
<script setup>
const emit = defineEmits(['child-event']);// 当需要执行时触发事件
function triggerEvent() {emit('child-event', { data: '子组件数据' });
}defineExpose({ triggerEvent });
</script>

推荐方案对比

方法优点适用场景
ref 直接调用直接高效,逻辑清晰父组件直接控制子组件特定操作
Props 回调函数符合单向数据流需要传递数据到父组件的情况
自定义事件符合组件解耦原则子组件主动通知父组件的场景

最佳实践建议

  1. 需要直接控制子组件行为时 → 使用 ref 方法

  2. 需要子组件返回数据时 → 使用 Props 回调

  3. 实现组件解耦时 → 使用自定义事件

根据你的具体场景选择最合适的方式,通常 ref 直调是最直接高效的解决方案。

http://www.xdnf.cn/news/14063.html

相关文章:

  • pytorch2.6安装
  • 编程之礼乐
  • Karate UI测试之驱动配置
  • 嵌入式学习笔记C语言阶段--14可变长数组
  • HTTP 缓存策略:强缓存与协商缓存的深入解析
  • Docker 部署 PostgreSQL 指南
  • C++ RPC 远程过程调用详细解析
  • Python爬虫-爬取票牛明星演唱会数据,进行数据分析
  • 日志分割问题
  • 卷积神经网络的参数量及尺度变化计算
  • [每周一更]-(第147期):使用 Go 语言实现 JSON Web Token (JWT)
  • WWDC25中的HDR技术洞察
  • 基于深度学习的智能图像分类系统:从零开始构建
  • BeckHoff <---> Keyence (LJ-8000) 2D相机 Profinet 通讯
  • PyTorch框架详解(1)
  • 韦东奕论文解读
  • 开机自启动文件夹
  • Vue嵌套路由
  • 机器学习入门 | 机器学习方法与模型概述
  • 【图纸管理教程-3】编码统一,效率倍增!解决一物多码问题
  • Manus邀请薅羊毛
  • WPF加载文本文件时如何设置WebBrowser的字体
  • 第三章支线八 ·构建之巅 · 工具链与打包炼金术
  • ELK日志文件分析系统——概念
  • linux pcie【6】- epf驱动介绍
  • 土壤水分温度盐分ph测定仪
  • Linux系统环境变量详解
  • 一键读取Excel生成可视化图表
  • 【6S.081】Lab2 System Calls
  • QWebEngine