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编译宏函数对外暴漏这个属性和方法。再看看父组件内的加载完成后的控制台打印情况吧。

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

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


相关文章

  • HTML5新特性:为Web带来的翻天覆地变化

    HTML5作为HTML的最新版本,不仅强化了网页结构与内容,还引入了丰富的多媒体功能,以及改进的用户体验。这些新特性不仅为开发人员提供了更多的工具和选项,也为用户带来了更加流畅和丰富的网络体验。参数解释:: 定义文档或文档部分的页眉。: 定义导航链接的部分。: 定义文档中的节,比如章节、页眉、页脚或文档中的其他部分。: 定义文档或文档部分的页脚。效果如下:2. 多媒体支持案例代码:参数解释:结果如下:以逐渐浮现某元素效果为例:参数解释:: 用于绘制图形的

  • 深入理解 Vue3 中的 setup 函数

    在 Vue3 中,setup 函数是一个新引入的概念,它代替了之前版本中的 data、computed、methods 等选项,用于设置组件的初始状态和逻辑。setup 函数的引入使得组件的逻辑更加清晰和灵活,本文将主要介绍Setup的基本用法和少量原理更灵活的组织逻辑:setup 函数可以将相关逻辑按照功能进行组织,使得组件更加清晰和易于维护。不再受到 Options API 中选项的限制,可以更自由地组织代码。

  • 小程序 自定义组件和生命周期

    类似vue或者react中的自定义组件⼩程序允许我们使⽤⾃定义组件的⽅式来构建⻚⾯。类似于页面,一个自定义组件由 json wxml wxss js 4个文件组成可以在微信开发者⼯具中快速创建组件的⽂件结构在⽂件夹内 components/myHeader ,创建组件 名为 myHeader⾸先要在⻚⾯的 json ⽂件中进⾏引⽤声明。还要提供对应的组件名和组件路径index.wxml// 引用声明// 要使用的组件的名称 // 组件的路径&lt; view &gt; _微信小程序 自定义组件生命周期

  • HarmonyOS 鸿蒙应用开发( 六、实现自定义弹窗CustomDialog)

    自定义弹窗(CustomDialog)可用于广告、中奖、警告、软件更新等与用户交互响应操作。开发者可以通过CustomDialogController类显示自定义弹窗。具体用法请参考自定义弹窗。

  • 解决 pnpm : 无法加载文件 C:\Program Files\nodejs\pnpm.ps1,因为在此系统上禁止运行脚本。

    在命令行输入 set-ExecutionPolicy RemoteSigned 然后按回车,再回到控制台输入pnpm相关命令就可以使用了。执行下面命令进行安装pnpm安装后。然后执行pnpm 报错。再输入Y 回车即可。