vue中provide、inject的使用方法案例詳解
示例背景
本教程是介紹如何在vue中使用provide和inject。在 Vue 中,provide 和 inject 是用于實(shí)現(xiàn)祖先組件向后代組件傳遞數(shù)據(jù)的一種方式
。 在這個(gè)示例中,祖組件通過(guò) provide 提供了 message 變量 和message2 變量 ,子組件通過(guò) inject 注入了 message 變量,孫組件通過(guò) inject 注入了 message2 變量。這樣,子組件和孫就可以訪問(wèn)到父組件提供的數(shù)據(jù)。
示例效果圖
示例源代碼
父組件代碼
/* * @Author: 大劍師蘭特(xiaozhuanlan),還是大劍師蘭特(CSDN) * @此源代碼版權(quán)歸大劍師蘭特所有,可供學(xué)習(xí)或商業(yè)項(xiàng)目中借鑒,未經(jīng)授權(quán),不得重復(fù)地發(fā)表到博客、論壇,問(wèn)答,git等公共空間或網(wǎng)站中。 * @Email: 2909222303@qq.com * @weixin: gis-dajianshi * @First published in CSDN * @First published time: 2024-02-04 */ <template> <div class="djs-box"> <div class="topBox"> <h3>vue中provide/inject怎么使用(圖文示例)</h3> <div>大劍師蘭特, 還是大劍師蘭特,gis-dajianshi</div> </div> <div class="dajianshi"> <ComA></ComA> </div> </div> </template> <script> import ComA from '../components/provideInject/demo-A.vue'; export default { components:{ ComA }, provide() { return { message: 'Hello from ROOT-message', message2: 'Hello from ROOT-message2' }; } } </script> <style scoped> .djs-box { width: 1000px; height: 650px; margin: 50px auto; border: 1px solid teal; } .topBox { margin: 0 auto 0px; padding: 10px 0 20px; background: teal; color: #fff; } .dajianshi { width: 98%; height: 480px; margin: 5px auto 0; display: flex; justify-content: space-between; border:1px solid #369; } </style>
子組件代碼
/* * @Author: 大劍師蘭特(xiaozhuanlan),還是大劍師蘭特(CSDN) * @此源代碼版權(quán)歸大劍師蘭特所有,可供學(xué)習(xí)或商業(yè)項(xiàng)目中借鑒,未經(jīng)授權(quán),不得重復(fù)地發(fā)表到博客、論壇,問(wèn)答,git等公共空間或網(wǎng)站中。 * @Email: 2909222303@qq.com * @weixin: gis-dajianshi * @First published in CSDN * @First published time: 2024-02-04 */ <template> <div style="margin-top: 100px;"> <div class="left"> <h2>兒子組件從跟組件獲取的信息message:</h2> <div style="color: blue;">{{message}}</div> </div> <div class="right"> <h2>孫子組件從跟組件獲取的內(nèi)容message2:</h2> <ChildA></ChildA> </div> </div> </template> <script> import ChildA from '@/components/provideInject/demo-A-A.vue'; export default { inject: ['message'], components:{ ChildA }, } </script> <style scoped> .left{ width: 48%; float:left;} .right{ width: 48%; float:right; height:300px; border:1px solid #ddd;} </style>
孫組件代碼
/* * @Author: 大劍師蘭特(xiaozhuanlan),還是大劍師蘭特(CSDN) * @此源代碼版權(quán)歸大劍師蘭特所有,可供學(xué)習(xí)或商業(yè)項(xiàng)目中借鑒,未經(jīng)授權(quán),不得重復(fù)地發(fā)表到博客、論壇,問(wèn)答,git等公共空間或網(wǎng)站中。 * @Email: 2909222303@qq.com * @weixin: gis-dajianshi * @First published in CSDN * @First published time: 2024-02-04 */ <template> <div> <div style="color: red;">{{ message2 }}</div> </div> </template> <script> export default { inject: ['message2'], } </script>
基本使用步驟
Vue中的provide和inject是用于實(shí)現(xiàn)依賴注入的API,其基本使用步驟如下:
- 在父組件中使用provide:在父組件(祖先組件)的provide選項(xiàng)中,指定想要提供給后代組件的數(shù)據(jù)或方法。這些數(shù)據(jù)或方法可以是任意類型,包括函數(shù)、對(duì)象、原始值等。
- 在子組件中使用inject:在任何后代組件中,通過(guò)inject選項(xiàng)來(lái)接收父組件提供的數(shù)據(jù)或方法。inject可以是一個(gè)字符串?dāng)?shù)組,也可以是一個(gè)對(duì)象。如果是對(duì)象,可以指定鍵名與默認(rèn)值。
- 傳遞非響應(yīng)式數(shù)據(jù):需要注意的是,通過(guò)provide/inject傳遞的數(shù)據(jù)不會(huì)自動(dòng)變成響應(yīng)式的。如果需要在子組件中監(jiān)聽這些數(shù)據(jù)的變化,可能需要結(jié)合Vue的響應(yīng)式系統(tǒng)進(jìn)行處理。
- 解決逐級(jí)傳遞問(wèn)題:provide/inject特別適用于解決跨多個(gè)層級(jí)的組件間數(shù)據(jù)傳遞問(wèn)題,避免了通過(guò)props逐級(jí)傳遞的繁瑣過(guò)程。
到此這篇關(guān)于vue中provide、inject的使用方法的文章就介紹到這了,更多相關(guān)vue provide、inject使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue項(xiàng)目打包到服務(wù)器后請(qǐng)求接口報(bào)錯(cuò)404的解決
這篇文章主要介紹了Vue項(xiàng)目打包到服務(wù)器后請(qǐng)求接口報(bào)錯(cuò)404的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05VUE3+mqtt封裝解決多頁(yè)面使用需重復(fù)連接等問(wèn)題(附實(shí)例)
最近了解到mqtt這樣一個(gè)協(xié)議,可以在web上達(dá)到即時(shí)通訊的效果,下面這篇文章主要給大家介紹了關(guān)于VUE3+mqtt封裝解決多頁(yè)面使用需重復(fù)連接等問(wèn)題的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04element-ui帶輸入建議的input框踩坑(輸入建議空白以及會(huì)閃出上一次的輸入建議問(wèn)題)
這篇文章主要介紹了element-ui帶輸入建議的input框踩坑(輸入建議空白以及會(huì)閃出上一次的輸入建議問(wèn)題),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01vue項(xiàng)目使用luckyexcel預(yù)覽excel表格功能(心路歷程)
這篇文章主要介紹了vue項(xiàng)目使用luckyexcel預(yù)覽excel表格,我總共嘗試了2種方法預(yù)覽excel,均可實(shí)現(xiàn),還發(fā)現(xiàn)一種方法可以實(shí)現(xiàn),需要后端配合,叫做KKfileview,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10vue3+vite+ts?通過(guò)svg-sprite-loader?插件使用自定義圖標(biāo)的詳細(xì)步驟
這篇文章主要介紹了vue3+vite+ts通過(guò)svg-sprite-loader插件使用自定義圖標(biāo),本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09VUE.CLI4.0配置多頁(yè)面入口的實(shí)現(xiàn)
這篇文章主要介紹了VUE.CLI4.0配置多頁(yè)面入口的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11詳解如何在Vue2中實(shí)現(xiàn)組件props雙向綁定
在Vue2中組件的props的數(shù)據(jù)流動(dòng)改為了只能單向流動(dòng),如何在Vue2中實(shí)現(xiàn)組件props雙向綁定 ,一起來(lái)跟小編看看。2017-03-03