詳細分析Vue3中的defineExpose(附Demo)

目錄

  • 前言
  • 1. 基本知識
  • 2. Demo
  • 3. 實戰

前言

其基本知識可參考官網:Vue3中的defineExpose

1. 基本知識

defineExpose 是 Vue 3 的 Composition API 中一個新的實用函數,用于在 <script setup> 語法下顯式暴露組件的公共屬性和方法

這在處理子組件時特別有用,允許父組件訪問子組件的特定屬性或方法

在 Vue 3 中,當我們使用 <script setup> 語法糖時,組件默認不會自動暴露內部的任何狀態或方法給外部使用,為了顯式暴露某些屬性或方法,可以使用 defineExpose

示例Demo如下:

<script setup>
import { ref } from 'vue'const a = 1
const b = ref(2)defineExpose({a,b
})
</script>

當父組件通過模板引用的方式獲取到當前組件的實例,獲取到的實例會像這樣 { a: number, b: number } (ref 會和在普通實例中一樣被自動解包)

2. Demo

  1. 父組件渲染子組件 Child 并通過 ref 獲取子組件的實例。
  2. 子組件中的 count 和 increment 方法通過 defineExpose 暴露出來。
  3. 當點擊父組件中的 “Access Child Methods” 按鈕時,父組件可以訪問并調用子組件的 count 和 increment

子組件:

<template><div><p>Count: {{ count }}</p><button @click="increment">Increment</button></div>
</template><script setup>
import { ref } from 'vue';const count = ref(0);function increment() {count.value++;
}// 使用 defineExpose 來暴露 count 和 increment
defineExpose({count,increment,
});
</script>

父組件:

<template><div><Child ref="childRef" /><button @click="accessChild">Access Child Methods</button></div>
</template><script setup>
import { ref, onMounted } from 'vue';
import Child from './Child.vue';const childRef = ref(null);function accessChild() {if (childRef.value) {console.log('Current count:', childRef.value.count);childRef.value.increment();console.log('Count after increment:', childRef.value.count);}
}onMounted(() => {if (childRef.value) {console.log('Child component mounted, initial count:', childRef.value.count);}
});
</script>

總的來說:

  • defineExpose 用于在 <script setup> 中顯式暴露組件內部狀態和方法
  • 父組件可以通過 ref 訪問子組件實例并調用暴露的屬性和方法
  • 使用 defineExpose 可以讓組件更加模塊化和可控,只有顯式暴露的部分才能被外部訪問,增強了封裝性和安全性

這個功能在組件之間需要進行復雜交互時特別有用,尤其是在大型項目中,能夠顯著提升代碼的可讀性和可維護性

3. 實戰

也可通過函數進行暴露

<template><div><button @click="open">Fetch Data</button><div v-if="detailLoading">Loading...</div><div v-else><div v-for="item in detailData.attachment1" :key="item">{{ item }}</div><div v-for="item in detailData.attachment2" :key="item">{{ item }}</div></div></div>
</template><script setup>
import { ref, onMounted } from 'vue'
import DangerousWorkApi from '@/api/DangerousWorkApi'const detailLoading = ref(false)
const detailData = ref({})
const props = defineProps(['id'])
const queryId = 'some-query-id'const getInfo = async () => {detailLoading.value = truetry {detailData.value = await DangerousWorkApi.getDangerousWork(props.id || queryId)const attachment1 = detailData.value.attachment1;const attachment2 = detailData.value.attachment2;detailData.value.attachment1 = attachment1.split(",");detailData.value.attachment2 = attachment2.split(",");} finally {detailLoading.value = false}
}defineExpose({ open: getInfo })onMounted(() => {getInfo()
})
</script>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/12621.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12621.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/12621.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OpenAI 重磅發布:ChatGPT Mac 桌面應用震撼上線!

OpenAI 重磅發布&#xff1a;ChatGPT Mac 桌面應用震撼上線&#xff01; 博主貓頭虎的技術世界 &#x1f31f; 歡迎來到貓頭虎的博客 — 探索技術的無限可能&#xff01; 專欄鏈接&#xff1a; &#x1f517; 精選專欄&#xff1a; 《面試題大全》 — 面試準備的寶典&#xff0…

51單片機:點亮一個LED燈

1.新建工程 選擇AT89C52&#xff0c;在Atmel下顯示的是See Microchip 并不需要添加啟動文件到文件夾中。 添加main.c文件&#xff0c;c比cpp效率高&#xff0c;.asm匯編即更底層 程序編寫好后 nop(); 該函數在這個頭文件里面 #include <INTRINS.H> #include <R…

Java JDK下載安裝教程(2024年)

博主介紹&#xff1a;?Java老徐、7年大廠程序員經歷。全網粉絲12w、csdn博客專家、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域和畢業項目實戰? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&#x1f3fb; 精彩專欄推薦訂閱&#x1f447;&…

2024 Google I/O Android 相關內容匯總

2024 Google I/O Android 相關內容匯總 本次 Google I/O 的核心雖然是 AI &#xff0c;但是 Android 也是作為主要議題出現&#xff0c; Android 部分可以簡單分為產品和開發相關內容&#xff0c;接下來主要介紹這兩部分的相關更新。 重點開始開發相關&#xff0c;內容不少 產…

業務系統加固和安全設備加固

業務系統加固 業務系統包含哪些系統? 業務系統漏洞面臨的風險 1web風險 2漏洞掃描&#xff0c;端口掃描 3系統漏洞 4邏輯漏洞 5 信息泄露 6拒絕服務 7口令爆破 加固方式&#xff1a; 在風險加上修復 1web漏洞&#xff1a; 包括csrf,xss&#xff0c;口令破解等等 修…

koa2 + jsonwebtoken + koa-jwt:實現node token驗證

一、koa token生成、驗證 koa-jwt官網 https://github.com/koajs/jwt 推薦一個koa-jwt學習文檔&#xff1a; https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html jsonwebtoken方法添加 const { sign, verify } require(jsonwebtoken); const secretKey …

ICode國際青少年編程競賽- Python-4級訓練場-列表綜合練習

ICode國際青少年編程競賽- Python-4級訓練場-列表綜合練習 1、 Flyer[3].step(1) Flyer[7].step(2) Flyer[11].step(1) for i in range(4):Flyer[i * 2].step(1) Flyer[8].step(3)for i in range(3):Dev.turnRight()Dev.step(-5)2、 for i in range(5):Flyer[i5].step(Flyer[…

JavaWeb--18 tlias-web-management 登錄認證

登錄認證 1 登錄功能功能開發 2 登錄校驗2.1 問題分析2.2 會話技術CookieSession令牌技術 2.3 JWT令牌介紹生成和校驗登錄下發令牌 2.4 過濾器Filter攔截路徑過濾器鏈 登錄校驗-Filter 2.5 攔截器InterceptorInterceptor詳解執行流程 登錄校驗- Interceptor 3 異常處理3.1 當前…

【會議征稿】2024年機器人前沿技術與創新國際會議(FTIR 2024, 7/19-21)

2024年機器人前沿技術與創新國際會議&#xff08;FTIR 2024&#xff09;將于2024年7月19-21日在中國杭州舉行。FTIR 2024聚焦前沿技術與創新&#xff0c;將把機器人領域的創新學者和專家聚集到一個共同的論壇。會議的主要目標是促進機器人的研究和開發活動&#xff0c;另一個目…

基于EBAZ4205礦板的圖像處理:11閾值系數可調的圖像局部閾值二值化

基于EBAZ4205礦板的圖像處理&#xff1a;11閾值系數可調的圖像局部閾值二值化 先看效果 還是一樣拿我的pynq當模特&#xff0c;然后用usb——HDMI采集卡把輸出圖像采集到電腦上。 注意看右邊mobelxtem中的通過串口調節的參數&#xff0c; 我這里是實現了閾值系數可調的局部閾…

利用CAD繪制角度斜線的簡易指南---模大獅模型網

在CAD設計中&#xff0c;繪制角度斜線是常見的需求&#xff0c;尤其在工程、建筑等領域中。正確繪制角度斜線不僅可以提高圖紙的清晰度和美觀度&#xff0c;還有助于準確表達設計意圖。本文將介紹如何利用CAD軟件進行角度斜線的繪制&#xff0c;為您提供簡明易懂的操作指南。 一…

安全設備篇——抗DDOS設備

寫在前面&#xff1a;up初研究這個設備的時候以為很容易&#xff0c;畢竟ddos嘛大家都懂&#xff0c;但是實際去找資料和研究的時候發現資料少的可憐&#xff0c;再加上大家知道ddos但大多沒見過&#xff0c;萬幸up的老東家某普有這類設備&#xff0c;和之前的同事溝通了一下還…

實戰期權:權利金=定金;無需等到期日

買方: 無需支付保證金,只需支付較低的權利金(定金)。 風險: 虧損有上限,即權利金損失;但盈利無限,以小博大。 使用場景: 大型單邊行情。 行情的絕對頂部 or 底部,最好是第二次頂或者第二次抵,風險較小。 買方舉例: 假如判斷當前在底部,買入看漲期權call…

網絡完全精通版

一、目錄結構 1.1目的的特點 windows和linux windows中C、D、E盤&#xff0c;每個都是一個根系統【多跟系統】 linux中只有一個根【單根系統】 1.2各個目錄存儲的內容 /root&#xff1a;linux中掛管理員用戶的家目錄 /home&#xff1a;linux中掛存儲普通用戶的家目錄的目…

GitLab CI/CD的原理及應用詳解(三)

本系列文章簡介: 在當今快速變化的軟件開發環境中,持續集成(Continuous Integration, CI)和持續交付(Continuous Delivery, CD)已經成為提高軟件開發效率、確保代碼質量以及快速響應市場需求的重要手段。GitLab CI/CD,作為GitLab平臺提供的一套強大的自動化工具集,為開…

Unity射擊游戲開發教程:(17)添加推進器推進和推進器推進動畫

添加推進器打開功能 我們可以添加一個推進器欄,用于跟蹤玩家使用推進器增強(按住左 Shift 鍵)的時間。當未使用推力時,將會有一段延遲,直到推力條開始再生。當棒再生時,可以使用推進器,但再生過程將重新開始。 我們將使用 Unity 的 UI Slider 組件,因此我們將其添加到已…

編程算法中,有許多經典的問題和挑戰

在編程算法中&#xff0c;有許多經典的問題和挑戰&#xff0c;下面是一些常見的問題名字及其簡要描述&#xff1a; 迷宮問題 (Maze Problem)&#xff1a;給定一個迷宮布局&#xff0c;找到從起點到終點的路徑。 八皇后問題 (N-Queens Problem, 通常特指8皇后)&#xff1a;在NN…

Docker容器啟動時報OCI runtime create failed解決方案

解決方案&#xff1a;此問題是因為selinux未關閉所致&#xff0c;解決方案是修改/etc/selinux/config文件&#xff0c;將SELINUX設為disabled&#xff0c;重啟服務器即可。

ctfshow web入門 SSTI注入 web361--web368

web361 這里轉載一篇教繞過方法的文章 hint:考點就是題目 傳參?name{{2*2}}回顯是4&#xff0c;找到漏洞 說實話這里對py不太好的朋友有點不友好&#xff0c;因為payload都是py的 這里用popen方法來執行命令 ?name{{config.__class__.__init__.__globals__[os].popen(more …