vue3 setup 怎么获取子组件的ref

发布于 2022-09-12 23:34:50 字数 127 浏览 41 评论 0

image.png
image.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

酒几许 2022-09-19 23:34:51

题目中的写法是对的,只不过拿到的引用是空的。

子组件需要明确使用expose方法暴露出接口之后,才能在父组件获取到接口引用。

未暴露接口的情况下,引用的始终是一个空对象。

// child.vue
<template>
  <div>child</div>
</template>
<script setup>
import { useContext } from "vue";
const { expose } = useContext(); // 通过context获取expose方法
const sayHi = ref('Hello world');
expose({
  sayHi // 明确的暴露接口
});
</script>
// parent.vue
<template>
  <div>I have a child</div>
  <Child ref="childRef" />
</template>
<script setup>
import { onMounted } from "vue";
import Child from "./child.vue"
const childRef = ref(null) // 子组件引用
onMounted(()=>{
  console.log(childRef.value); // => Proxy {sayHi: RefImpl}
  console.log(childRef.value.sayHi);  // => Hello world
})
</script>
少跟Wǒ拽 2022-09-19 23:34:51

vue3使用$refs ,可以通过vm = getCurrentInstance()拿到组件实例,然后在 vm.ctx.$refs 上找到对模板的引用。https://feizhaojun.com/?p=3355

只是我以为 2022-09-19 23:34:51

注意 mounted 不会保证所有的子组件也都一起被挂载。如果你希望等到整个视图都渲染完毕,可以在 mounted 内部使用 vm.$nextTick

v3也同样有这个提示,生命周期钩子 | Vue.js

浅忆 2022-09-19 23:34:50

感觉跟 defineAsyncComponent 有关系,组件还没加载出来,onMounted 已经执行完了。

一曲爱恨情仇 2022-09-19 23:34:50

不应该用getCurrentInstance拿当前组件实例吗

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文