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

父组件调用子组件方法(组合式 API版)

在 Vue 3 中,defineExpose 是一个用于在组合式 API (Composition API) 中暴露组件内部方法或属性的函数。它允许父组件通过 ref 引用子组件实例,并调用子组件暴露的方法或访问其属性。

以下是子组件和父组件如何使用 defineExposeref 的详细解释和示例。

子组件

子组件通过 defineExpose 来暴露方法,使父组件能够调用这些方法。

<!-- 子组件 SelectCase.vue -->
<template><a-modal v-model:visible="caseIsVisable"><!-- 模态框内容 --></a-modal>
</template><script setup>
import { ref } from 'vue';const caseIsVisable = ref(false);// 新增,打开模态框
const openModal = () => {caseIsVisable.value = true;
};// 取消,关闭模态框
const handleCancel = () => {caseIsVisable.value = false;
};// 暴露方法给父组件
defineExpose({openModal,handleCancel,
});
</script>

父组件

父组件通过 ref 引用子组件实例,并可以调用子组件暴露的方法。

<!-- 父组件 ParentComponent.vue -->
<template><SelectCase ref="selectCaseRef" :graphInfo="graphInfo" /><button @click="openChildModal">Open Modal in Child</button>
</template><script setup>
import { ref } from 'vue';
import SelectCase from './SelectCase.vue';const graphInfo = ref({}); // 示例数据// 引用子组件实例
const selectCaseRef = ref(null);// 调用子组件方法
const openChildModal = () => {selectCaseRef.value.openModal();
};
</script>

原理解释

  1. 子组件中的 defineExpose:

    • defineExpose 用于将子组件的某些方法或属性暴露给父组件。在这个例子中,openModalhandleCancel 方法通过 defineExpose 暴露。
    • 这样做的目的是让父组件能够调用这些方法来控制子组件的行为,比如打开或关闭模态框。
  2. 父组件中的 ref:

    • 在父组件中,通过 ref 引用子组件的实例。使用 ref 可以在父组件中直接访问子组件的方法和属性。
    • 例如,const selectCaseRef = ref(null); 创建一个引用来存储子组件实例。
    • 在模板中,通过 ref="selectCaseRef" 将子组件实例赋值给 selectCaseRef
  3. 调用子组件的方法:

    • 一旦子组件实例被引用到 selectCaseRef,父组件就可以通过 selectCaseRef.value 访问子组件的暴露方法。
    • selectCaseRef.value.openModal(); 调用子组件的 openModal 方法,从而在子组件中打开模态框。

相关文章:

  • 浅谈申请小程序地理位置权限的正确打开方式
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • yolov5-ros模型结合zed2相机部署在 Ubuntu系统
  • MoE-LLaVA:为大型视觉-语言模型引入专家混合
  • Freeswitch-soundtouch-变声开发
  • 网络编程(八)
  • 深入了解Java单例模式及其使用场景
  • 工欲善其事必先利其器——IntelliJ IDEA神器使用技巧
  • Starlette
  • 盛夏之约,即将启程,2024中国北京消防展将于6月26举行
  • 数据结构(3)栈、队列、数组
  • 局域网电脑监控软件是如何监控到内网电脑的?
  • 【全开源】Java短剧系统微信小程序+H5+微信公众号+APP 源码
  • Docker面试整理-Docker的网络是如何工作的?
  • Keras深度学习框架实战(5):KerasNLP使用GPT2进行文本生成
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • canvas绘制圆角头像
  • JAVA SE 6 GC调优笔记
  • Java,console输出实时的转向GUI textbox
  • JavaScript中的对象个人分享
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • React组件设计模式(一)
  • Spring Cloud Feign的两种使用姿势
  • unity如何实现一个固定宽度的orthagraphic相机
  • vue-cli在webpack的配置文件探究
  • 从setTimeout-setInterval看JS线程
  • 技术:超级实用的电脑小技巧
  • 漂亮刷新控件-iOS
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 微信小程序开发问题汇总
  • 用Visual Studio开发以太坊智能合约
  • 白色的风信子
  • !$boo在php中什么意思,php前戏
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #### go map 底层结构 ####
  • #传输# #传输数据判断#
  • (2020)Java后端开发----(面试题和笔试题)
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (翻译)terry crowley: 写给程序员
  • (附源码)计算机毕业设计ssm电影分享网站
  • (篇九)MySQL常用内置函数
  • (三)SvelteKit教程:layout 文件
  • (算法)Travel Information Center
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)重识new
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • ***原理与防范
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .Net Core 中间件验签
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET DataGridView数据绑定说明
  • .NET框架设计—常被忽视的C#设计技巧
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题