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.mzph.cn/news/893841.shtml

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

相关文章

Docker 国内镜像源

目录 概述 步骤 参考资料 概述 自 2024-06-06 开始&#xff0c;阿里&#xff0c;腾讯、中科大等国内的 Docker Hub 镜像加速器相继停止服务&#xff0c;总结了网友整理出来一些其他国内 Docker Hub 镜像源&#xff0c;经过测试可以使用。 步骤 配置 Docker 守护程序 修改…

HTML5使用favicon.ico图标

目录 1. 使用favicon.ico图标 1. 使用favicon.ico图标 favicon.ico一般用于作为网站标志&#xff0c;它显示在浏览器的地址栏或者标签上 制作favicon图标 选择一个png转ico的在线网站&#xff0c;这里以https://www.bitbug.net/为例。上传图片&#xff0c;目标尺寸选择48x48&a…

xarray转换nc文件经度范围:0-360更改为-180-180

原文见https://blog.csdn.net/weixin_44237337/article/details/119707332&#xff0c;因为觉得很实用就转载一下。 lon_name longitude #你的nc文件中经度的命名 ds[longitude_adjusted] xr.where(ds[lon_name] > 180,ds[lon_name] - 360,ds[lon_name]) ds (ds.swap_d…

834 数据结构(自用)

一.绪论 1.数据结构基本概念 1.基本术语: 数据元素&#xff1a;数据基本单位。 数据项&#xff1a;众多数据项组成一个数据元素&#xff0c;不可分割的最小单位。 数据对象&#xff1a;具有相同性质的数据元素集合。 数据结构&#xff1a;相互之间存在一种或多种特定关系…

【C++动态规划 网格】2328. 网格图中递增路径的数目|2001

本文涉及知识点 C动态规划 LeetCode2328. 网格图中递增路径的数目 给你一个 m x n 的整数网格图 grid &#xff0c;你可以从一个格子移动到 4 个方向相邻的任意一个格子。 请你返回在网格图中从 任意 格子出发&#xff0c;达到 任意 格子&#xff0c;且路径中的数字是 严格递…

fatal error C1083: ޷[特殊字符]ļ: openssl/opensslv.h: No such file or directory

一、环境 1. Visual Studio 2017 2. edk2&#xff1a;202305 3. Python&#xff1a;3.11.4 二、 fatal error C1083: ޷&#xbfab0;ļ: openssl/opensslv.h: No such file or directory 上图出现这个警告&#xff0c;不用管。 出现Done&#xff0c;说明编译成功。 执行上…

组件框架漏洞

一.基础概念 1.组件 定义&#xff1a;组件是软件开发中具有特定功能或特性的可重用部件或模块&#xff0c;能独立使用或集成到更大系统。 类型 前端 UI 组件&#xff1a;像按钮、下拉菜单、导航栏等&#xff0c;负责构建用户界面&#xff0c;提升用户交互体验。例如在电商 AP…

性能测试丨JVM 性能数据采集

什么是JVM性能数据采集&#xff1f; JVM性能数据采集是指通过一些工具和技术采集与Java虚拟机相关的性能数据。这些数据包括但不限于内存使用、CPU使用、垃圾回收&#xff08;GC&#xff09;行为、线程活动等。合理地分析这些数据&#xff0c;可以帮助我们找出系统的瓶颈&…

隐藏字符造成的linux命令执行失败(非常难绷)

隐藏字符问题发生情景 事情是这样的&#xff0c;为了方便主机和虚拟机之间数据的传输&#xff0c;我打算建一个共享文件夹。由于我选择的是手动挂载&#xff0c;在VirtualBox 中创建好共享文件夹后&#xff0c;我着手打开Ubuntu&#xff0c;想将这个共享文件夹挂载到我的家目录…

[ Spring ] Spring Cloud Alibaba Aliyun OSS 2025

文章目录 Declare PluginsIntroduce DenpendenciesOSS ApplicationOSS ConfigOSS Controller Declare Plugins pluginManagement {repositories {gradlePluginPortal()google()mavenCentral()} }dependencyResolutionManagement {repositoriesMode RepositoriesMode.PREFER_S…

C/C++ 虚函数

虚函数的定义 虚函数是指在基类内部声明的成员函数前面添加关键字 virtual 指明的函数虚函数存在的意义是为了实现多态&#xff0c;让派生类能够重写(override)其基类的成员函数派生类重写基类的虚函数时&#xff0c;可以添加 virtual 关键字&#xff0c;但不是必须这么做虚函…

爬虫基础之爬取某基金网站+数据分析

声明: 本案例仅供学习参考使用&#xff0c;任何不法的活动均与本作者无关 网站:天天基金网(1234567.com.cn) --首批独立基金销售机构-- 东方财富网旗下基金平台! 本案例所需要的模块: 1.requests 2.re(内置) 3.pandas 4.pyecharts 其他均需要 pip install 模块名 爬取步骤: …

RKNN_C++版本-YOLOV5

1.背景 为了实现低延时&#xff0c;所以开始看看C版本的rknn的使用&#xff0c;确实有不足的地方&#xff0c;请指正&#xff08;代码借鉴了rk官方的仓库文件&#xff09;。 2.基本的操作流程 1.读取模型初始化 // 设置基本信息 // 在postprocess.h文件中定义&#xff0c;详见…

Learning Vue 读书笔记 Chapter 2

2. Vue 基本工作原理 2.1 Virtual DOM 概念&#xff1a; DOM: DOM以内存中树状数据结构的形式&#xff0c;代表了网页上的HTML&#xff08;或XML&#xff09;文档内容。它充当了一个编程接口&#xff0c;将网页与实际的编程代码&#xff08;如JavaScript&#xff09;连接起来…

Python标准库 - os (1) 环境变量、进程的用户和组

文章目录 1 访问和修改环境变量1.1 访问环境变量1.2 修改环境变量 2 进程的用户和组2.1 进程的ID2.2 进程的用户2.3 进程组 os模块提供了各种操作系统接口。包括环境变量、进程管理、进程调度、文件操作等方面。 这里整理了环境变量、进程的用户和用户组相关的控制方法。 参考…

Synology 群辉NAS安装(4)docker-compose

Synology 群辉NAS安装&#xff08;4&#xff09;docker-compose Synology 群辉NAS安装&#xff08;4&#xff09;docker-composeerror while loading shared libraries: libz.so.1 Synology 群辉NAS安装&#xff08;4&#xff09;docker-compose 1.下载最新版docker-compose |…

【C++高并发服务器WebServer】-7:共享内存

本文目录 一、共享内存1.1 shmget函数1.2 shmat1.3 shmdt1.4 shmctl1.5 ftok1.6 共享内存和内存映射的关联1.7 小demo 二、共享内存操作命令 一、共享内存 共享内存允许两个或者多个进程共享物理内存的同一块区域&#xff08;通常被称为段&#xff09;。由于一个共享内存段会称…

【C语言指针】数组指针和指针数组

一、数组指针 1.1 含义 数组指针本质是一个指针&#xff0c;它指向一个数组也就是说它指向数组在内存中的起始地址。数组指针可以用来处理多维数组&#xff0c;尤其是二维数组。 1.2 数组指针的一般形式 首先数组的一般形式是&#xff1a; int a[10] {1,2,3,4,5};这里a代…

关于av_get_channel_layout_nb_channels函数

问题&#xff1a;ffmpeg5.1 使用av_get_channel_layout_nb_channels函数时报错。 过程&#xff1a;经过检查&#xff0c;发现对应头文件内已经不包含该函数。遂查找资料&#xff0c;发现在ffmpeg5.1之后该函数被废弃&#xff0c;具体而言&#xff0c;新增了AVChannelLayout。 …

CrypTen——基于pytorch的隐私保护机器学习框架

目录 一、CrypTen概述 二、应用场景 三、CrypTen优势 四、CrypTen技术解析 1.基于pytorch的构建基础 2.核心密码学原语 3.加密模型训练流程 五、传统隐私保护技术与CrypTen的对比 1.传统隐私保护技术介绍 2.CrypTen与传统隐私保护技术的区别 六、CrypTen的环境配置…