Vue 3 中的标签 ref 与 defineExpose:模板引用与组件暴露

在 Vue 3 中,ref 不仅可以用于创建响应式数据,还可以用于获取 DOM 节点或组件实例。通过 ref,我们可以直接访问模板中的元素或组件,并在需要时操作它们。此外,defineExpose 用于在 <script setup> 语法中显式暴露组件的属性或方法。本文将详细介绍 refdefineExpose 的使用方法,并提供代码示例。


1. ref 的基本概念

ref 在模板中有两种主要用途:

  1. 获取 DOM 节点

    • ref 用在普通 DOM 标签上时,获取的是 DOM 节点。
  2. 获取组件实例

    • ref 用在组件标签上时,获取的是组件实例对象。

2. 使用 ref 获取 DOM 节点

我们可以通过 ref 获取模板中的 DOM 节点,并在脚本中操作它们。

2.1 代码示例

<template><div class="person"><h2 ref="title2">前端</h2><h3 ref="title3">Vue</h3><input type="text" ref="input" placeholder="请输入内容" /><br /><br /><button @click="showLog">点我打印内容</button></div>
</template><script setup lang="ts">
import { ref } from 'vue';// 获取 DOM 节点的引用
const title2 = ref<HTMLHeadingElement | null>(null);
const title3 = ref<HTMLHeadingElement | null>(null);
const input = ref<HTMLInputElement | null>(null);// 打印 DOM 节点的内容
function showLog() {console.log('title2:', title2.value?.textContent);console.log('title3:', title3.value?.textContent);console.log('input value:', input.value?.value);
}
</script><style scoped>
.person {padding: 20px;background-color: #f0f0f0;border-radius: 10px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}button {margin-top: 10px;padding: 5px 10px;
}
</style>

2.2 代码解析

  1. ref 获取 DOM 节点

    • 使用 ref 绑定到 h2h3input 标签上,获取它们的 DOM 节点。
    • 在脚本中通过 ref 的值访问这些 DOM 节点。
  2. 操作 DOM 节点

    • 点击按钮时,打印各个 DOM 节点的内容或值。

3. 使用 ref 获取组件实例

ref 用在组件标签上时,可以获取该组件的实例对象,从而访问组件的属性或方法。

3.1 代码示例

父组件(Parent.vue)
<template><div><Child ref="childRef" /><button @click="callChildMethod">调用子组件方法</button></div>
</template><script setup lang="ts">
import { ref } from 'vue';
import Child from './Child.vue';// 获取子组件的实例
const childRef = ref<InstanceType<typeof Child> | null>(null);// 调用子组件的方法
function callChildMethod() {childRef.value?.sayHello();
}
</script>
子组件(Child.vue)
<template><div><h1>子组件</h1></div>
</template><script setup lang="ts">
// 暴露方法给父组件
function sayHello() {console.log('Hello from Child component!');
}// 使用 defineExpose 暴露方法
defineExpose({sayHello
});
</script>

3.2 代码解析

  1. 父组件

    • 使用 ref 获取子组件的实例。
    • 通过 childRef.value 访问子组件暴露的方法 sayHello
  2. 子组件

    • 使用 defineExpose 显式暴露 sayHello 方法。
    • 父组件可以通过 ref 访问子组件的暴露内容。

4. defineExpose 的作用

<script setup> 语法中,组件的属性和方法默认是私有的,外部无法直接访问。通过 defineExpose,我们可以显式暴露组件的属性或方法,使父组件能够通过 ref 访问它们。

4.1 使用场景

  • 暴露组件的公共方法供父组件调用。
  • 暴露组件的内部状态或数据。

4.2 代码示例

<template><div><h1>子组件</h1><p>计数:{{ count }}</p></div>
</template><script setup lang="ts">
import { ref } from 'vue';const count = ref(0);function increment() {count.value++;
}// 暴露 count 和 increment
defineExpose({count,increment
});
</script>

5. 总结

  • ref 的作用

    • 获取 DOM 节点或组件实例。
    • 用于操作 DOM 或访问组件的属性和方法。
  • defineExpose 的作用

    • <script setup> 中显式暴露组件的属性或方法。
    • 使父组件能够通过 ref 访问子组件的暴露内容。
  • 适用场景

    • 操作 DOM 节点(如表单输入、动态样式等)。
    • 父子组件通信(如调用子组件方法、访问子组件状态)。

通过本文的介绍和代码示例,希望你能更好地理解 Vue 3 中 refdefineExpose 的使用方法,并在实际项目中灵活运用它们!

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

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

相关文章

MongoDB平替数据库对比

背景 项目一直是与实时在线监测相关&#xff0c;特点数据量大&#xff0c;读写操作大&#xff0c;所以选用的是MongoDB。但按趋势来讲&#xff0c;需要有一款国产数据库可替代&#xff0c;实现信创要求。选型对比如下 1. IoTDB 这款是由清华大学主导的开源时序数据库&#x…

动手学深度学习-卷积神经网络-3填充和步幅

目录 填充 步幅 小结 在上一节的例子&#xff08;下图&#xff09; 中&#xff0c;输入的高度和宽度都为3&#xff0c;卷积核的高度和宽度都为2&#xff0c;生成的输出表征的维数为22。 正如我们在 上一节中所概括的那样&#xff0c;假设输入形状为nhnw&#xff0c;卷积核形…

简易CPU设计入门:控制总线的剩余信号(二)

项目代码下载 请大家首先准备好本项目所用的源代码。如果已经下载了&#xff0c;那就不用重复下载了。如果还没有下载&#xff0c;那么&#xff0c;请大家点击下方链接&#xff0c;来了解下载本项目的CPU源代码的方法。 CSDN文章&#xff1a;下载本项目代码 上述链接为本项目…

【MySQL】 数据类型

欢迎拜访&#xff1a;雾里看山-CSDN博客 本篇主题&#xff1a;【MySQL】 数据类型 发布时间&#xff1a;2025.1.27 隶属专栏&#xff1a;MySQL 目录 数据类型分类数值类型tinyint类型数值越界测试结果说明 bit类型基本语法使用注意事项 小数类型float语法使用注意事项 decimal语…

深度剖析C++17中的std::optional:处理可能缺失值的利器

文章目录 一、基本概念与设计理念二、构建与初始化&#xff08;一&#xff09;默认构造&#xff08;二&#xff09;值初始化&#xff08;三&#xff09;使用std::make_optional&#xff08;四&#xff09;使用std::nullopt 三、访问值&#xff08;一&#xff09;value()&#x…

云计算架构学习之LNMP架构部署、架构拆分、负载均衡-会话保持

一.LNMP架构部署 1.1. LNMP服务搭建 1.磁盘信息 2.内存 3.负载信息 4.Nginx你们公司都用来干嘛 5.文件句柄(文件描述符 打开文件最大数量) 6.你处理过系统中的漏洞吗 SSH漏洞 7.你写过什么shell脚本 8.监控通过什么告警 zabbix 具体监控哪些内容 9.mysql redis查询 你好H…

[BSidesCF 2020]Had a bad day1

题目 这里有传参 文件包含使用伪协议读取flag 先读取index.php查看 /index.php?categoryphp://filter/readconvert.base64-encode/resourceindex 解码 index.php源码 <?php$file $_GET[category];if(isset($file)){if( strpos( $file, "woofers" ) ! false …

12 款开源OCR发 PDF 识别框架

2024 年 12 款开源文档解析框架的选型对比评测&#xff1a;PDF解析、OCR识别功能解读、应用场景分析及优缺点比较 这是该系列的第二篇文章&#xff0c;聚焦于智能文档处理&#xff08;特别是 PDF 解析&#xff09;。无论是在模型预训练的数据收集阶段&#xff0c;还是基于 RAG…

银行卡三要素验证接口:方便快捷地实现银行卡核验功能

银行卡三要素验证API&#xff1a;防止欺诈交易的有力武器 随着互联网的发展&#xff0c;电子支付方式也越来越普及。在支付过程中&#xff0c;银行卡是最常用的支付工具之一。然而&#xff0c;在一些支付场景中&#xff0c;需要对用户的银行卡信息进行验证&#xff0c;以确保支…

Lite.Ai.ToolKit - 一个轻量级的 C++ 工具包

&#x1f6e0;**Lite.Ai.ToolKit**&#xff1a;一个轻量级的 C 工具包&#xff0c;包含 100 个很棒的 AI 模型&#xff0c;例如对象检测、人脸检测、人脸识别、分割、遮罩等。请参阅 Model Zoo 和 ONNX Hub、MNN Hub、TNN Hub、NCNN Hub。 3700 Stars 711 Forks 0 Issues 6 贡献…

node.js 07.npm下包慢的问题与nrm的使用

一.npm下包慢 因为npm i 默认从npm官网服务器进行下包,但是npm官网服务器是海外服务器所以响应很慢. 于是我们通过npm下包的时候通常用淘宝镜像进行下包,下面是切换到淘宝镜像地址下包的操作. 二.nrm的使用 nrm是一个管理切换npm下包地址的工具,可以快速切换下包的地址. 安…

读书笔记--分布式服务架构对比及优势

本篇是在上一篇的基础上&#xff0c;主要对共享服务平台建设所依赖的分布式服务架构进行学习&#xff0c;主要记录和思考如下&#xff0c;供大家学习参考。随着企业各业务数字化转型工作的推进&#xff0c;之前在传统的单一系统&#xff08;或单体应用&#xff09;模式中&#…

基于ADS的电感和变压器的建模过程

1. 电感二端口建模 对于固定尺寸单圈电感&#xff0c;从0.5G-200GHz的仿真&#xff0c;并提取其模型 如果想要在50GHz前把模型建准&#xff0c;仿真可能要建到200G&#xff0c;因为需要高频的数据&#xff0c;频率越高信息也越多。首先要调用文件由于数据是存在一个文件夹里面的…

使用Maxscript定义纹理贴图的方法

在3ds Max中,MaxScript 是一种用于插件编写和自动化任务的强大工具。通过MaxScript,你可以创建和操作对象、材质、灯光等等。要为材质分配纹理贴图,你可以按照以下方法来编写脚本。直接代码: myBmp = bitmaptexture filename:"D:\map001.tga" meditmaterials[1]…

初阶数据结构:链表(二)

目录 一、前言 二、带头双向循环链表 1.带头双向循环链表的结构 &#xff08;1)什么是带头&#xff1f; (2)什么是双向呢&#xff1f; &#xff08;3&#xff09;那什么是循环呢&#xff1f; 2.带头双向循环链表的实现 &#xff08;1&#xff09;节点结构 &#xff08;2…

项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(九)(完结篇)

文章目录 一、成绩查询模块实现1、学生成绩查询功能实现1.1 页面设计1.2 前端页面实现1.3 后端功能实现2、成绩分段查询功能实现2.1 页面设计2.2 前端页面实现2.3 后端功能实现二、试卷练习模块实现三、我的分数模块实现1、 页面设计2、 前端页面实现3、 后端功能实现四、交流区…

环境搭建--vscode

vscode官网下载合适版本 安装vscode插件 安装 MinGW 配置环境变量 把安装目录D&#xff1a;\mingw64 配置在用户的环境变量path里即可 选择用户环境变量path 点确定保存后开启cmd输入g&#xff0c;如提示no input files 则说明Mingw64 安装成功&#xff0c;如果提示g 不是内…

爱的魔力转圈圈,基于carsim与simulink模拟仰望u8原地调头

仰望U8原地转向的示意图如下&#xff0c;不动方向盘的情况下&#xff0c;车可以自己转圈圈&#xff1a; 原理也很简单&#xff0c;仰望u8是四轮驱动&#xff0c;四个轮子都单独由四个轮边电机驱动。主要我们将左右的车轮轮速控制成左右两边轮速相同&#xff0c;但是方向相反&am…

1.1第1章DC/DC变换器的动态建模-1.1状态平均的概念--电力电子系统建模及控制 (徐德鸿)--读书笔记

电力电子系统一般由电力电子变换器&#xff08;滤波电路和开关&#xff09;、PWM 调制器、驱动电路、反馈控制单元构成&#xff0c;如图1-1所示。由控制理论的知识&#xff0c;电力电子系统的静态和动态性能的好坏与反馈控制设计密切相关。要进行反馈控制设计&#xff0c;首先要…

6. 使用springboot做一个音乐播放器软件项目【1.0版项目完结】附带源码~

#万物OOP 注意&#xff1a; 本项目只实现播放音乐和后台管理系统。 不分享任何音乐歌曲资源。 上一篇文章我们 做了音乐播放器后台的功能。参考地址&#xff1a; https://jsonll.blog.csdn.net/article/details/145214363 这个项目已经好几天也没更新了&#xff0c;因为临近放…