vue3的最新版本寇荧,提供了一個<script setup>的語法糖,可以讓我們在編寫單文件組件(SFC)時代碼更簡潔户侥,官網(wǎng)對其對介紹說明:vue官網(wǎng)對setup語法糖的介紹
但是使用了setup語法糖后峦嗤,我們會發(fā)現(xiàn)組件通過$refs無法直接調(diào)用子組件的函數(shù)、方法刃泌。
通過查找官方文檔署尤,我們發(fā)現(xiàn)官方對其做出了解釋說明:使用<script setup>的組件默認(rèn)是關(guān)閉的,即通過模板 ref 或者?$parent?鏈獲取到的組件的公開實例俗扇,不會暴露任何在?<script setup>?中聲明的綁箕别。defineExpose的說明
要解決這個問題很簡單,只需要在被調(diào)用的子組件中除抛,通過defineExpose暴露對應(yīng)的函數(shù)母截、屬性即可。如下:
<!-- 子組件 -->
<template>
? ? <div>children</div>
</template>
<script setup>
????const count = ref(0)
? ? function test() {
????????console.log(‘子組件的方法’)
????}
? ? defineExpose({
????????test,
????????count
????})
</script>