vue3.js通过ref的方式获取子元素失败?

作者站长头像
站长
· 阅读数 3

vue3.js通过ref的方式获取子元素失败

Html

<test ref="testdata"></test>

js:

<script setup lang="ts">
  import test from './test.vue'
  

  const testdata = ref(null);
 onMounted(() => {
  console.log(testdata.value,'testdata')
 })

</script>

打印出来为null

回复
1个回答
avatar
test
2024-06-23

在Vue3中,如果使用setup方法来写的话,在父组件中是无法直接通过ref来获取到子组件的实例对象的,也就意味着你再像Vue2那样去获取.

在Vue3中如果想要获取到子组件的方法或属性,需要主动向外暴露,下面写一个简单的例子parent.vue

<template>
<test ref="tt"></text>
</template>
<script setup>
import {ref, onmounted} from "vue";
const tt = ref(null);
onmounted(() => {
    //要获取子组件中的myFun方法
    console.log(tt.value.myFun)
})
</script>

子组件text.vue

<script setup>
import { defineExpose } from "vue";
function myFun() {
  console.log("object");
}
let name = ref("bigNeck");
// 要想父组件可以访问到子组件内的方法,需要主动暴露,使用的是defineExpose方法
defineExpose({
  myFun,
  name,
});
</script>

以上就可以了,也就是说你想要获取子组件哪个方法或属性,都需要主动手动暴露。这也符合Vue3的开发思想,就是按需加载。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容