Vue3中使用setup通過ref獲取子組件的屬性
setup通過ref獲取子組件的屬性
主要依賴defineExpose
子組件通過 defineExpose將數(shù)據(jù)拋出
<template> ? <div class="test-com">testCom</div> </template>
<script setup lang="ts"> import { ref } from 'vue' const testText = ref('我是子組件的數(shù)據(jù)') defineExpose({ ? text: testText }) </script>
父組件通過給子組件綁定ref 然后結(jié)合nextTick回調(diào)函數(shù)獲取子組件的數(shù)據(jù)
<template> ? <div> ? ? <TestCom ref="getTestComRef" /> ? ? {{ showText }} ? </div> </template>
<script lang="ts" setup> import { nextTick, ref } from 'vue' import TestCom from './components/TestCom.vue' const getTestComRef = ref<{ ? text: string }>() const showText = ref() nextTick(() => { ? showText.value = getTestComRef.value?.text }) </script>
效果圖
調(diào)用子組件的屬性和方法
今天在寫 vue3 項(xiàng)目時(shí),需要在父組件里面調(diào)用子組件的方法,但是打印出來(lái)卻是這個(gè)樣子:
發(fā)現(xiàn)打印出來(lái)的數(shù)據(jù)啥都沒有,難道是代碼問題?
上代碼:
父組件代碼
<template> ? <son ref="sonRef"></son> </template>
<script setup> import { onMounted, ref } from "vue"; import Son from "./view/son.vue"; const sonRef = ref(null); onMounted(() => { ? console.log(sonRef.value); }); </script>
son 組件代碼
<template> ? <div>子組件</div> </template>
<script setup> const a = "555"; const fn = () => { ? console.log("執(zhí)行了fn"); }; </script>
通過翻閱 vue 文檔發(fā)現(xiàn)文檔中寫著一個(gè)叫 defineExpose 的 api,是這樣介紹的:
使用 <script setup> 的組件是默認(rèn)關(guān)閉的,也即通過模板 ref 或者 $parent 鏈獲取到的組件的公開實(shí)例,不會(huì)暴露任何在 <script setup> 中聲明的綁定。
大致意思就是:使用 script setup 語(yǔ)法糖的組件,不會(huì)往外暴露任何在該語(yǔ)法糖中聲明的變量,需要使用defineExpose 語(yǔ)法來(lái)將你想暴露出去的變量和方法暴露出去
son 組件代碼修改后:
<template> ? <div>子組件</div> </template>
<script setup> const a = "555"; const fn = () => { ? console.log("執(zhí)行了fn"); }; defineExpose({ ? a, ? fn, }); </script>
然后就可以在控制臺(tái)看到我們?cè)诳刂婆_(tái)打印出了子組件上變量和方法,然后就可以進(jìn)行調(diào)用了
over,問題解決!
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Vue獲取子組件實(shí)例對(duì)象ref屬性的方法推薦
- Vue父子組件數(shù)據(jù)雙向綁定(父?jìng)髯?、子傳父)及ref、$refs、is、:is的使用與區(qū)別
- vue3?setup中父組件通過Ref調(diào)用子組件的方法(實(shí)例代碼)
- 詳解Vue3?父組件調(diào)用子組件方法($refs?在setup()、<script?setup>?中使用)
- vue ref如何獲取子組件屬性值
- vue 父組件通過$refs獲取子組件的值和方法詳解
- Vue通過ref父子組件拿值方法
- vue之父子組件間通信實(shí)例講解(props、$ref、$emit)
- vue 使用ref 讓父組件調(diào)用子組件的方法
- vue如何通過ref調(diào)用router-view子組件的方法
相關(guān)文章
vue+axios實(shí)現(xiàn)圖片上傳識(shí)別人臉的示例代碼
本文主要介紹了vue+axios實(shí)現(xiàn)圖片上傳識(shí)別人臉,這里采用的是vant的文件上傳組件,通過上傳圖片后端識(shí)別圖片里的人臉,感興趣的可以了解一下2021-11-11Vue中監(jiān)視屬性和計(jì)算屬性區(qū)別解析
這篇文章主要介紹了Vue中監(jiān)視屬性和計(jì)算屬性區(qū)別,通過本文學(xué)習(xí)大家知道computed與watch配置項(xiàng)問題,computed能完成的功能,watch都可以完成,本文通過實(shí)例代碼給大家詳細(xì)講解,需要的朋友可以參考下2022-10-10基于vue-cli3多頁(yè)面開發(fā)apicloud應(yīng)用的教程詳解
這篇文章主要介紹了基于vue-cli3多頁(yè)面開發(fā)apicloud應(yīng)用,本文采用vue-cli+APIcloud的方式寫解決以上痛點(diǎn),開發(fā)靈活,并且打包之后體積更小速度更快,需要的朋友可以參考下2019-06-06vue element-ui el-cascader級(jí)聯(lián)選擇器數(shù)據(jù)回顯的兩種實(shí)現(xiàn)方法
這篇文章主要介紹了vue element-ui el-cascader級(jí)聯(lián)選擇器數(shù)據(jù)回顯的兩種實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2023-07-07vue后臺(tái)系統(tǒng)管理項(xiàng)目之角色權(quán)限分配管理功能(示例詳解)
這篇文章主要介紹了vue后臺(tái)系統(tǒng)管理項(xiàng)目-角色權(quán)限分配管理功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09vue數(shù)組對(duì)象排序的實(shí)現(xiàn)代碼
這篇文章主要介紹了vue數(shù)組對(duì)象排序的實(shí)現(xiàn)代碼,這里整理了詳細(xì)的代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-06-06Vue中v-for的數(shù)據(jù)分組實(shí)例
下面小編就為大家分享一篇Vue中v-for的數(shù)據(jù)分組實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-03-03Vue項(xiàng)目報(bào)錯(cuò):Uncaught SyntaxError: Unexpected token <
這篇文章主要介紹了Vue項(xiàng)目報(bào)錯(cuò):Uncaught SyntaxError: Unexpected token <,在引入第三方依賴的 JS 文件時(shí),遇到的一個(gè)問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2018-11-11