Vue3前端开发,如何获取组件内dom对象以及子组件的属性和方法

Vue3前端开发,借助Ref来获取组件内dom对象,借助defineExpose编译宏可以获取到子组件的属性和方法。


<script setup>
import {onMounted, ref} from 'vue'
import Base from './components/Base.vue'
import SetupDemo from './components/SetupDemo.vue'
import ReactiveDemo from './components/ReactiveDemo.vue'
import ComputedDemo from './components/ComputedDemo.vue'
import WatchDemo from './components/WatchDemo.vue'
import MutationsDemo from './components/MutationsDemo.vue'
import WatchDemo2 from './components/WatchDemo2.vue'
import LifeDemo from './components/LifeDemo.vue'
import ImageDemo2 from './components/ImageDemo2.vue'
import Parent from './components/Parent.vue'
import Child from './components/Child.vue'
import TestCom from './components/TestCom.vue'const priceRef = ref(null)
onMounted(()=>{console.log(priceRef.value);
})
</script>
<template><h3>入口文件</h3><!-- 1-用ref函数来获取组件内的dom对象。 -->
<p ref="priceRef">车厘子单价:49</p>
<TestCom />
</template>

app入口文件,我们作为父组件,在里面调用了自定义组件TestCom.vue。

先做了一个测试,借助于ref来访问自身的dom对象。如图所示是可以拿到的。

ref又称谓钩子函数,在vue2版本中,就是靠它来获取dom对象的。可以查看我之前写的一篇文章。文章入口地址:【为什么ref称作钩子函数】。

传统的vue2里面,我们访问dom时的代码,还是的借助于this对象的【this.$refs.userName】。现在Vue3放弃了this对象。直接从源码里结构出来一个宏对象就行了【const priceRef = ref(null)】。

想获取哪个dom,就给它身上绑定一个这样的ref实例。


下面展示的是,借助于ref来访问子组件的实例对象。(声明:默认情况下,子组件内部的属性和方法,不会主动对外暴漏的。想暴漏给别人访问,需要借助于defineExpose)

<script setup>
import {onMounted, ref} from 'vue'
import Base from './components/Base.vue'
import SetupDemo from './components/SetupDemo.vue'
import ReactiveDemo from './components/ReactiveDemo.vue'
import ComputedDemo from './components/ComputedDemo.vue'
import WatchDemo from './components/WatchDemo.vue'
import MutationsDemo from './components/MutationsDemo.vue'
import WatchDemo2 from './components/WatchDemo2.vue'
import LifeDemo from './components/LifeDemo.vue'
import ImageDemo2 from './components/ImageDemo2.vue'
import Parent from './components/Parent.vue'
import Child from './components/Child.vue'
import TestCom from './components/TestCom.vue'const priceRef = ref(null)
const comRef = ref(null)
onMounted(()=>{// console.log(priceRef.value);console.log(comRef.value);
})
</script>
<template><h3>入口文件</h3><!-- 1-用ref函数来获取组件内的dom对象。 -->
<p ref="priceRef">车厘子单价:49</p>
<TestCom ref="comRef" />
</template>

如图所示,代码里面我们给子组件实例调用的标签上绑定了一个ref对象。然后控制台打印一下。

页面加载之后,确实是可以拿到子组件的实例对象。但是看不见子组件内的属性和方法。


<script setup>
const msg = '子组件文本'
const btnHandle = ()=>{console.log('i am son btnHandle ');
}
defineExpose({msg,btnHandle
})
</script>
<template><h3>获取组件内的dom对象练习-获取组件的内部属性和方法</h3></template>

这个是子组件里面的内容,我们定义了一个常量,一个方法。

然后使用了defineExpose编译宏函数对外暴漏这个属性和方法。再看看父组件内的加载完成后的控制台打印情况吧。

如图,确实是可以拿到子组件的属性和方法了,如果不使用编译宏,是访问不到的。

之所以默认不对外暴漏,就是为了避免出现数据的干扰。毕竟,父子组件之间,各司其职。不应该轻易的去影响各自的业务逻辑。除非特殊情况下,真的需要访问了,才会使用这个编译宏对外暴漏。

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

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

相关文章

手把手教你如何搭建性能测试环境

前言 在进行性能则试前&#xff0c;需要完成性能测试的搭建工作&#xff0c;一般包括硬件环境、软件环境及网络环境&#xff0c;可以要求配置和开发工程师协助完成&#xff0c;但是作为一个优秀性能测试工程师&#xff0c;这也是你的必备技能之一。 性能测试环境与功能测试环…

1、中级机器学习课程简介

文章目录 1、课程简介2、先决条件 本课程所需数据集夸克网盘下载链接&#xff1a;https://pan.quark.cn/s/9b4e9a1246b2 提取码&#xff1a;uDzP 1、课程简介 欢迎来到机器学习中级课程&#xff01; 如果你对机器学习有一些基础&#xff0c;并且希望学习如何快速提高模型质量…

10w 字前端技术文档分析

在 2023 年 11 月份&#xff0c;有小伙伴跟我说前端学习得很迷茫&#xff0c;不知道该学什么&#xff0c;也不知道已经学过的学得怎么样&#xff0c;于是&#xff0c;我立即萌生了一种想法&#xff0c;我要写一份前端文档&#xff0c;既可以帮助我自己查漏补缺&#xff0c;也可…

day25 组合总和Ⅲ 电话号码的字母组合

题目1&#xff1a;216 组合总和Ⅲ 题目链接&#xff1a;216 组合总和Ⅲ 题意 找出相加之和为n的k个数的组合 数字只可使用1~9之间的数&#xff08;包括 1 9&#xff09;且每个数字只能使用1遍 题目中有两个限制条件&#xff1a;1&#xff09;k个数 2&#xff09;k个…

Pandas.DataFrame.count() 非空单元格计数 详解 含代码 含测试数据集 随Pandas版本持续更新

关于Pandas版本&#xff1a; 本文基于 pandas2.1.2 编写。 关于本文内容更新&#xff1a; 随着pandas的stable版本更迭&#xff0c;本文持续更新&#xff0c;不断完善补充。 Pandas稳定版更新及变动内容整合专题&#xff1a; Pandas稳定版更新及变动迭持续更新。 Pandas API参…

Ansys Zemax | 如何使用光学制造全息图修正像差

附件下载 联系工作人员获取附件 本文介绍了利用光学全息图降低单透镜像差的方法。在描述了表示全息图构造光束的两个 ZMX 文件之后&#xff0c;本文演示了如何在重现文件中设置 OFH。然后解释了如何轻松地从重现文件中访问任何结构造光束变量&#xff0c;以实现衍射受限单透镜…

【数据结构】常见八大排序算法总结

目录 前言 1.直接插入排序 2.希尔排序 3.选择排序 4.堆排序 5.冒泡排序 6.快速排序 6.1Hoare版本 6.2挖坑法 6.3前后指针法 6.4快速排序的递归实现 6.5快速排序的非递归实现 7.归并排序 8.计数排序&#xff08;非比较排序&#xff09; 9.补充:基数排序 10.总结…

第八讲_ArkTS装饰器(五)

ArkTS装饰器&#xff08;五&#xff09; 1. Watch装饰器1.1 Watch装饰器的特点1.2 Watch装饰器使用示例 2. ArkTS装饰器总结 1. Watch装饰器 Watch用于对状态变量的监听。如果需要关注某个状态变量的值是否改变&#xff0c;可以使用Watch为状态变量设置回调函数。 何为状态变…

产品经理学习-用户运营和用户分层模型

目录什么是用户运营用户运营三大工作体系用户分层模型-AARRR介绍 什么是用户运营 定义&#xff1a;用户运营就是搭建用户运营体系&#xff0c;围绕用户来做一系列的产品运营机制&#xff0c;提升太湖的活跃和留存&#xff0c;最终让用户进行付费。 例如小红书就是建立了用户…

C++进阶--哈希表的的闭散列和开散列(哈希桶)实现

哈希表的的闭散列和开散列&#xff08;哈希桶&#xff09;实现 一、哈希概念二、哈希冲突三、哈希函数3.1 直接定址法--&#xff08;常用&#xff09;3.2 除留余数法--&#xff08;常用&#xff09;3.3 平方取中法--&#xff08;了解&#xff09;3.4 折叠法--&#xff08;了解&…

MT36291替代MT3608 FP6291 低成本 用于移动电源,蓝牙音箱,便携式设备等

航天民芯原装MT36291 SOT23-6 PIN对PIN替代FP6291LR-G1 MT3608等&#xff0c;低成本&#xff0c;用于移动电源&#xff0c;蓝牙音箱&#xff0c;便携式设备等领域。 TEL:18028786817 专注于电源管理IC 一级代理 技术支持 欢迎试样&#xff01; 描述 MT36291是一个恒定频…

VitePress-01-从零开始的项目创建(npm版)

说明 本文介绍一下 VitePress的项目创建的步骤。 主要用到的命令工具是 npm。 本文的操作步骤是从无到有的创建一个完整的基本的【VitePress】项目。 环境准备 根据官方文档的介绍&#xff0c;截止本文发稿时&#xff0c;需要使用node.js 18 的版本。 可以使用node -v 的命令查…