- 第一种:自定义类型
- 通过
defineExpose
暴露子组件中的属性或方法 - 使用
<script setup>
的组件默认是关闭的,无法被其他组件获取该组件内部的各种属性,比如通过 $parent
和 ref
- 如果可以是外部访问到,需要使用
defineExpose
暴露出去想要被外部访问的属性或方法
- 这里定义了一个方法
handleClick
,并暴露出去 - 然后定义一个
API
类型,里面是暴露出去的 handleClick
<script setup lang="ts">
export interface API {
handleClick: () => void
}
defineExpose({
handleClick
})
let handleClick = (): void => {
console.log('触发了.....')
}
</script>
<template>
<HelloWorld msg="You did it!" ref="hellworld" />
</template>
<script setup lang="ts">
import HelloWorld, { type API as childAPI } from './components/HelloWorld.vue'
import { ref } from 'vue'
const hellworld = ref<null | childAPI>(null)
const handleClick = () => {
hellworld.value?.handleClick()
}
</script>
- 第二种:使用
InstanceType
InstanceType<T>
是 ts
自带的类型, 能够直接获取组件完整的实例类型
<script setup lang="ts">'
import HelloWorld from './components/HelloWorld.vue'
import { ref } from 'vue'
const hellworld = ref<null | InstanceType<typeof HelloWorld>>(null)
const handleClick = () => {
hellworld.value?.handleClick()
}
</script>