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

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><inputref="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>

参考文档:

  • https://cn.vuejs.org/api/sfc-script-setup.html#defineexpose
  • https://cn.vuejs.org/guide/essentials/template-refs.html#ref-on-component
http://www.lryc.cn/news/171759.html

相关文章:

  • PaddleSeg学习3——使用PP-LiteSeg模型对道路进行分割
  • 时序数据库的关键技术点总结
  • 【ROS】机器人使用Nomachine进行远程控制
  • Jmeter系列-定时器Timers的基本介绍(11)
  • 【华为OD机试python】求满足条件的最长子串的长度【2023 B卷|100分】
  • iOS技术博主指南:填写苹果应用上架中的隐私政策信息
  • Spring事件机制之ApplicationEvent
  • 【操作系统笔记】内存寻址
  • webpack自定义loader解析指定后缀名文件
  • 基于Kintex UltraScale系列FPGA KU060/KU115高性能PCIe数据预处理载板(5GByte/s带宽)
  • Cesium 地球(2)-瓦片创建
  • Selenium-介绍下其他骚操作
  • 【C++从0到王者】第三十一站:map与set
  • 生产消费者模型的介绍以及其的模拟实现
  • Unity ML-Agents默认接口参数含义
  • 【python数据分析基础】—pandas中loc()与iloc()的介绍与区别
  • ad18学习笔记十一:显示和隐藏网络、铺铜
  • 全国职业技能大赛云计算--高职组赛题卷④(私有云)
  • Camera Tunning ISP 模块面试总结
  • AOSP源码中Android.mk文件中的反斜杠符号(\)的作用和使用
  • 如何查看mysql的存储引擎
  • FPGA project : dht11 温湿度传感器
  • std::string和QString的区别以及互转
  • python+vue理发店管理系统
  • 基于微信小程序的个人健康管理系统的设计与实现(源码+lw+部署文档+讲解等)
  • 共聚焦显微镜在化学机械抛光课题研究中的应用
  • 本地Linux 部署 Dashy 并远程访问
  • 互联网摸鱼日报(2023-09-18)
  • Kotlin中函数的基本用法以及函数类型
  • 在macOS使用VMware踩过的坑