自动暴露子组件的方法,注意在TS下,需要自己声明类型,我这里全用any代替了
typescript
<template>
<el-button @click="getFocus">获得焦点</el-button>
<com ref="comRef" />
</template>
<script setup lang="ts">
import { ref } from 'vue'
import com from './components/com.vue'
const comRef = ref(null);
const getFocus = () => {
(comRef.value! as any).focus()
};
</script>
子组件
typescript
<template>
<el-input v-model="val" placeholder="请输入文本框" ref="inputRef" />
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { InputInstance } from 'element-plus'
const val = ref('');
const inputRef = ref<null | InputInstance>(null);
defineExpose(new Proxy({}, {
get(_target, key) {
return (inputRef.value as any)?.[key];
},
has(_target, key) {
return key in inputRef.value! as any;
},
}))
</script>