vue3.js通过ref的方式获取子元素失败?
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个回答
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的开发思想,就是按需加载。
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容