vue3中通过ref获取子组件实例,取值为undefined

基于 <script setup> + TS 的情况

分三步

1、在子组件暴露需要被父组件调用的属性

2、在子组件定义类型

3、父组件引入子组件的类型,并定义 ref

 第一步:defineExpose 暴露子组件属性

defineExpose({ select })

第二步:在子组件定义组件实例类型

如果完成第一步的话,在父组件调用子组件实例里某个属性的时候,TS 会报错,找不到该属性(但不影响运行)所以这里还需要定义一个类型,来声明子组件实例的类型

第三步:定义子组件的暴露的数据类型,并定义 ref

声明子组件的 ref ,获取子组件实例(注意只能使用暴露出来的属性)

Vue 3中,通过ref无法直接获取组件实例对象。原因是Vue 3在设计上做了一些改变,引入了Composition API,使用ref来包装数据,而不再用于获取组件实例。 在Vue 2中,我们可以使用this.$refs来获取组件实例对象,但在Vue 3中,这种方法已被废弃。代替的做法是使用setup函数和提供的Composition API。 在组件的setup函数中,我们可以通过返回一个对象来将里面的属性和方法暴露给组件使用。如果希望获取组件实例对象,可以借助Vue 3提供的内置函数getCurrentInstance()。 getCurrentInstance()函数返回了一个"currentInstance"对象,该对象包含了组件实例的一些属性和方法。通过这个对象,我们可以获取组件实例,并进行相关操作。 举个例子,假设我们有一个名为"HelloWorld"的组件,我们希望在组件内部获取实例对象。可以按照以下步骤: 1. 在组件的setup函数中,使用getCurrentInstance()获取组件实例对象。 2.获取到的实例对象保存在一个变量中,例如"instance"。 3. 现在,我们可以通过"instance"来访问组件实例的属性和方法。 下面是一个简单的示例代码: ```javascript import { getCurrentInstance, ref } from &#39;vue&#39; export default { setup() { const instance = getCurrentInstance() // 使用ref包装组件内部的属性 const data = ref(&#39;Hello World&#39;) // 对组件实例进行操作 console.log(instance.props) // 访问组件的props console.log(instance.emit) // 调用组件的emit方法 // 返回需要暴露给组件的数据 return { data } } } ``` 通过这种方式,我们可以在Vue 3获取到组件实例对象,并进行相应的操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值