我正在尝试使用Composition API在Vue 3中获取$refs。这是我的模板,有两个子组件,我需要获取一个子组件示例的引用:
<template>
<comp-foo />
<comp-bar ref="table"/>
</template>
在我的代码中,我使用Template Refs:ref是一个特殊的属性,它允许我们在特定的DOM元素或子组件示例被挂载后获得对它的直接引用。
如果我使用选项API,那么我没有任何问题:
mounted() {
console.log("Mounted - ok");
console.log(this.$refs.table.temp());
}
但是,使用Composition API时,我会收到错误:
setup() {
const that: any = getCurrentInstance();
onMounted(() => {
console.log("Mounted - ok");
console.log(that.$refs.table.temp());//ERROR that.$refs is undefined
});
return {};
}
有谁能说一下如何使用Composition API实现它吗?
7条答案
按热度按时间sauutmhj1#
你需要在安装程序中创建ref常量,然后返回它,这样它就可以在html中使用。
35g0bw712#
关于Laravel Inertia:
6bc51xsx3#
在其他组件中,您可以与已经在onMounted生命周期钩子上注册的事件进行交互,就像我的示例一样,我只注册了一个evnet
rdrgkggo4#
如果需要,可以在父组件中使用
getCurrentInstance()
,如下代码所示:这是子组件的代码(这里我称之为
MyCompo
):yizd12fk5#
对我来说,
ref
变量没有绑定到组件,因为它还没有呈现。我将扩展@dantheman的解决方案。考虑以下情况:在这种情况下,由于条件而没有呈现
<div ref="table"/>
,const table
仍然是null
。假设false
变成了true
,那么const table
就被填充了。这一点在文档中也有明确说明:请注意,只能在安装元件之后访问参照。如果尝试访问模板表达式中的输入,则在第一次呈现时它将为null。这是因为元素直到第一次渲染之后才存在!
因此,您不仅需要查找
onMounted
,还需要查找ref
所连接的组件是否实际安装。nhhxz33t6#
如果你使用vue 3和composition API,那么Template Ref允许你这样做。
你可以在初始渲染后访问DOM。因为在创建dom之前会运行script setup。所以使用onMounted钩子可以访问目标元素。
您可以阅读此博客以了解更多关于template Refhttps://medium.com/@plabonislam/how-to-access-dom-element-using-vue-3-compostion-api-2181d69abee6
4dbbbstv7#
也许TypeScript更容易做到这一点。这对我很有效: