[ Vue3 ] 组合式API + Setup语法糖 如何获取组件实例?

Vue3 组合式API + Setup语法糖 如何获取组件实例?

Vue2获取方式

Vue2 中,我们可以给组件设置 ref 属性后,就可以直接通过:this.$refs.HelloRef 来获取组件实例中所有的属性和方法

<template><Hello ref="HelloRef" />
</template>

Vue3获取方式

Vue3 中,如果采用了组合式API,它是没有 this 的,所以写法与 Vue2 略有不同。我们可以这么做来获取组件中我们想要的数据

App.vue
首先老规矩,在 App.vue 中通过给 Hello.vue 子组件设置 ref 属性来获取子组件向父组件暴露的属性和方法

<template><!-- 1. 给组件设置ref属性 --><Hello ref="HelloRef" /><button @click="btn">获取组件实例</button>
</template><script lang="ts">
import { ref } from 'vue';
import Hello from './components/Hello.vue'export default {setup() {interface Hello { info: string, func: () => void }// 2. 定义组件变量const HelloRef = ref<Hello | null>(null)const btn = () => {// 4. 获取组件实例console.log(HelloRef.value?.info); // HelloHelloRef.value?.func() // Hello Vue3!}return { btn }}
}
</script>

Hello.vue
Hello.vue 子组件中通过 return 暴露出父组件需要的属性和方法即可

<template><h1>Hello</h1>
</template><script lang="ts">
import { ref } from 'vue';export default {setup() {const info = ref<string>("Hello")const func = () => {console.log("Hello Vue3!");}return { info, func }}
}
</script>

使用 setup 语法糖

但如果使用了 setup 语法糖,则需要用到 defineExpose 宏函数来解决这个问题。

App.vue

<template><Hello ref="HelloRef" /><button @click="btn">获取组件实例</button>
</template><script setup lang="ts">
import { ref } from 'vue';
import Hello from './components/Hello.vue'interface Hello { info: string, func: () => void }const HelloRef = ref<Hello | null>(null)const btn = () => {console.log(HelloRef.value?.info); // HelloHelloRef.value?.func() // Hello Vue3!
}
</script>

Hello.vue
Hello 组件中,通过 defineExpose 将需要暴露给父组件的属性和方法导出

<template><h1>Hello</h1>
</template><script setup lang="ts">
import { Ref, ref } from 'vue';const info = ref<string>("Hello")const func = () => {console.log("Hello Vue3!");
}// 3. 通过 defineExpose 暴露属性 / 方法// js写法
// defineExpose({ info, func })// ts写法
defineExpose<{ info: Ref<string>, func: () => void }>({ info, func })
</script>

注意: 在组合式API setup 语法糖中子组件不通过 defineExpose 将属性 / 方法暴露出去,父组件是无法获取到对应数据的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/185651.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes之kubeadm集群监控篇—kube-state-metrics 部署

kube-state-metrics pod文件编写 # cat kube-state-metrics.yaml apiVersion: v1 kind: Namespace metadata:name: kube-prom --- apiVersion: v1 kind: ServiceAccount metadata:labels:app.kubernetes.io/name: kube-state-metricsapp.kubernetes.io/version: 2.0.0-alpha.1…

mysql mybatis分页查询 大数据量 非常慢

查阅了很多博客和资料&#xff0c;这篇文章以思路为准&#xff0c;详细代码不细说&#xff0c;都是非常简单的方法&#xff0c;一看就明白。具体实现稍微百度一下就能出来。仅供参考。 如题&#xff1a;单表数据已经达到4千万条数据&#xff0c;通过mybatis的分页查询效率非常低…

Netfilter中的NAT

目录 前瞻 SNAT和DNAT SNAT DNAT 实验 前瞻 NAT: &#xff08;network address translation&#xff09;&#xff0c;支持PREROUTING&#xff0c;INPUT&#xff0c;OUTPUT&#xff0c;POSTROUTING四个链 NAT分为SNAT和DNAT SNAT&#xff1a;支持POSTROUTING, INPUT&…

ant design vue3 处理 ant-card-head ant-tabs靠左边对齐之has选择器不生效

火狐浏览器是不支持has的。 解决方法&#xff1a;通过position来解决。

Spring Cloud 配置 Nacos

一&#xff0c;下载Nacos 下载地址&#xff1a;https://github.com/alibaba/nacos/releases 二&#xff0c;启动Nacos 安装Nacos的bin目录下&#xff0c; 执行&#xff1a;startup.cmd -m standalone 然后打开上图红框的地址 三&#xff0c;配置服务 1 配置Nacos 创建命名…

「Bomkus 博士的试炼」排行榜规则更新

亲爱的玩家们 为了回应我们从社区收到的宝贵反馈&#xff0c;我们希望与大家分享我们为防止在「Bomkus 博士的试炼」排行榜中作弊而采取的措施的最新进展&#xff0c;并就这一主题提供更多说明。 除了在活动开始前采取的反作弊措施外&#xff0c;我们还根据观察到的和报告的行为…

Dubbo Spi机制

JDK SPI 机制就存在以下一些问题&#xff1a; 实现类会被全部遍历并且实例化&#xff0c;假如我们只需要使用其中的一个实现&#xff0c;这在实现类很多的情况下无疑是对机器资源巨大的浪费。无法按需获取实现类&#xff0c;不够灵活&#xff0c;我们需要遍历一遍所有实现类才…

Android Camera2开启电子防抖(EIS)和光学防抖(OIS)

刚好当前项目有录像功能&#xff0c;使用了第三方框架是基于Camera2引擎开发&#xff0c;当使用 Camera2 API 开发相机应用时&#xff0c;启用和关闭 EIS&#xff08;电子防抖&#xff09;是一个重要的功能。EIS 可以帮助减少相机拍摄时的抖动&#xff0c;从而提高图像和视频的…

python之pyqt专栏9-鼠标事件

目录 需求 UI界面 代码实现 代码解析&#xff1a; Label初始化设置 重写鼠标按下事件 重写鼠标释放事件 重写鼠标移动事件 运行结果 需求 当鼠标进入窗口时&#xff0c;点击鼠标左键&#xff0c;出现一个label并在显示光标在窗口的坐标&#xff1b;按住左键不释放拖动…

AntDB“超融合+流式实时数仓”——打造分布式数据库新纪元

&#xff08;一&#xff09; 前言 据统计&#xff0c;在信息化时代的今天&#xff0c;人们一天所接触到的信息量&#xff0c;是古人一辈子所能接收到的信息量的总和。当今社会中除了信息量“多”以外&#xff0c;人们对信息处理的“效率”和“速度”的要求也越来越高。譬如&a…

unknown error 1060

MySQL错误1060表示"Duplicate column name"&#xff0c;意思是重复的列名。 解决方式&#xff1a; 检查表结构&#xff1a;首先&#xff0c;确保要创建的列名在表结构中不存在。可以使用DESCRIBE table_name或SHOW COLUMNS FROM table_name语句来查看表的结构&#…

网络基础--win10双网卡设置成访问不同的网络

1、背景 我日常中大部分时间都是使用外网的网卡进行办公&#xff0c;只有在连接公司服务器时才需要使用内网。由于我的电脑存在两张网卡&#xff0c;分别用于连接不同的网络&#xff08;常见情况是一张访问公司内网&#xff0c;一张访问公司外网&#xff09;&#xff0c;但是在…

Small Data Transmission(一) overview

在R16之前,RRC Inactive 不支持数据传输,UE在RRC inactive状态有data要传输时,就要通过RRC resume过程,转换到RRC connected mode才能进行数据传输。 有时候UE要传输的数据包可能会很小,且发送频率也很低,如果每次发送数据都要进行上述过程,就会增加不必要的功耗和信令…

力扣日记11.28-【二叉树篇】二叉树的最小深度

力扣日记&#xff1a;【二叉树篇】二叉树的最小深度 日期&#xff1a;2023.11.28 参考&#xff1a;代码随想录、力扣 111. 二叉树的最小深度 题目描述 难度&#xff1a;简单 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点…

TDA4VM EVM开发板调试笔记

文章目录 1. 前言2. 官网资料导读3. 安装 Linux SDK4. 制作SD 启动卡5. 验证启动1. 前言 TDA4作为一般经典的车规级SOC芯片,基于它的低阶智驾方案目前成为各家智驾方案公司的量产首选,这也使得基于TDA4的开发需求陡增,开发和使用TDA4既要熟悉Linux驱应用开发,还要熟悉传统…

des加密算法的c++ 实现

以下是一个简单的 C 语言实现 DES 加密算法的例子&#xff1a; #include <stdio.h> #include <string.h> #include <openssl/des.h>int main() {// 设置 DES 密钥const char* key "01234567";DES_cblock des_key;memcpy(des_key, key, 8);// 设置…

《opencv实用探索·五》opencv小白也能看懂的图像腐蚀

1、图像腐蚀原理简单理解&#xff1a; 腐蚀是形态学最基本的操作&#xff0c;都是针对白色部分&#xff08;高亮部分&#xff09;而言的。即原图像中高亮部分被蚕食&#xff0c;得到比原图更小的区域。 2、图像腐蚀的作用&#xff1a; &#xff08;1&#xff09;去掉毛刺&…

如何安装鸿蒙Harmony 4.0低版API9三方库

比如我要用下拉刷新三方库pulltorefresh 安装命令如下 ohpm install ohos/pulltorefresh 安装完后然后运行Demo报错,说没有isAtEnd方法 然后查看pulltorefresh 最新版2.0.4对应Harmony API10,然而我的手机是API9,所以必须找到API9的库&#xff0c;然后查看2.0.1是还是API9 所…

测试与管理 Quota

用myquota1创建一个大的文件测试 理论猜想&#xff1a;超过soft可以&#xff0c;但是超过hard就不行了&#xff0c;最大值就是hard&#xff0c;如果超过soft&#xff0c;过了17天不处理&#xff0c;最后限制值会被强制设置成soft。修改设置成hard值 切换测试用户&#xff0c;m…

对话汪源:数智时代为企业构建新的竞争力,和网易数帆的“为与不为”

CodeWave在内的诸多“主演”正在重新演绎网易数帆&#xff0c;在网易数帆的新故事里&#xff0c;做专业、底层、核心的工具&#xff0c;是其成长至今最核心的底色。 作者|斗斗 编辑|皮爷 出品|产业家 “我希望在中间层能构建一个好的生态。”网易汪源的这句话&#xff0c;让…