使用 defineExpose 来导出方法
// child
<script setup>
import { ref, Ref } from 'vue'
const prop: Ref<string> = ref('child')
const method = (val: string) => {
console.log(val)
}
defineExpose({
prop,
method,
})
</script>
// father
<template>
<child ref="child" />
</template>
<script setup>
import { ref } from 'vue'
import child from './child.vue'
const child = ref<InstanceType<typeof child>>()
child.value.method(child.value.prop)
</script>
< script setup> 组件时默认不导出属性方法的(类似 java 的 private ),即通过 ref 获取实例是无法访问到自定义的属性和方法,但是可以获取到组件实例。
可以通过 defineExpose 来指定要暴露的方法属性,便可以在外部访问到组件自定义的属性方法了。
当然也可以去官网查看官方说法。