vue3 | defineExpose的使用

简介

使用<script setup>的组件是默认关闭的————即通过模板引用或者$parent链获取到的组件的公开实例,不会暴露在任何在<script setup>中声明的绑定

换句话说,如果一个子组件使用的是选项式 API 或没有使用 <script setup>,被引用的组件实例和该子组件的 this 完全一致,这意味着父组件对子组件的每一个属性和方法都有完全的访问权。

但是如果使用了 <script setup> 的组件,这种组件是默认私有的,也就是一个父组件无法访问到一个使用了 <script setup> 的子组件中的任何东西,除非子组件在其中通过 defineExpose 宏显式暴露:

<script setup> import { ref } from 'vue' const a = 1 const b = ref(2) // 像 defineExpose 这样的编译器宏不需要导入 defineExpose({ a, b }) </script>

举个栗子

父组件获取子组件的实例,去触发子组件实例身上的方法。

defineExpose-demo.gif

父组件

<template> <div class="p-20 pb-0 mb-4"> <div>父组件</div> <button class="mt-4" @click="handleClick">点我聚焦</button> </div> <Child ref="childeRef"></Child> </template> <script setup lang="ts"> import { ref, provide, onMounted } from "vue"; import Child from "./Child.vue"; const childeRef = ref<HTMLInputElement | null>(null); const handleClick = () => { childeRef.value?.inputRef?.focus(); }; </script>

子组件

<template> <hr /> <div class="p-20 pt-4"> <div>子组件</div> <input ref="inputRef" placeholder="请输入哈哈哈哈" class="border-1 mt-4" /><br /> </div> </template> <script setup lang="ts"> import { ref } from "vue"; const inputRef = ref<HTMLInputElement | null>(null); defineExpose({ inputRef, }); </script>

参考文档:


__EOF__

本文作者杨芋可可
本文链接https://www.cnblogs.com/yangyukeke/p/17719971.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   杨芋可可  阅读(1084)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2020-09-21 Python3.8下载安装步骤及环境变量配置详解
点击右上角即可分享
微信分享提示