Vue?中?provide和inject的使用
前言
在Vue中我們可以很方便的通過父組件往子組件傳遞屬性,Props是我們將數(shù)據(jù)傳遞到子組件的主要方式之一。例如,下面的代碼,我們往子組件(PopularList )傳遞了屬性 name
,其值是Most Popular Posts
。在PopularList中我們可以通過name訪問數(shù)據(jù)。
<PopularList name="Most Popular Posts" />
但是有時(shí)子組件中可以包含子組件,如果我們想將數(shù)據(jù)從父組件傳遞到孫子組件,最簡(jiǎn)單的方法就是使用provide/reject。這種方式的好處是:我們不需要將屬性先傳給子組件,再傳給孫子組件。就像Parent → Child → GrandChild。我們可以簡(jiǎn)單地將它傳遞為Parent → Grandchild,
如下圖所示:
Vue中如何使用provide和inject
如果你使用的是composition API??梢灾苯邮褂胮rovide 方法傳遞任何形式的數(shù)據(jù)。
<script setup> import { provide } from 'vue' provide('myKey', 'message'); </script>
provide函數(shù)接收兩個(gè)參數(shù) - 值和鍵。上面的例子中,鍵是mykey,值是message。和props一樣,這個(gè)是可以是對(duì)象,數(shù)字或其他任何有效類型的數(shù)據(jù)。使用ref,我們還可以將這個(gè)屬性設(shè)置為響應(yīng)式。
<script setup> import { provide, ref } from 'vue' const message = ref('message'); provide('myKey', message); </script>
如果使用的是Options API,則可以使用以下結(jié)構(gòu)在組件中提供數(shù)據(jù)。
export default { provide: { myKey: 'message' } }
在 Vue 中使用注入訪問父數(shù)據(jù)
在上面的例子中,我們說明了如何在父組件中傳值。我們?cè)趯O子組件中,該如何獲取到這個(gè)值,我們可以使用inject來訪問屬性。
例如,假設(shè)我們有一個(gè)如下所示的 Vue 組件:
<script setup> import { ref, provide } from 'vue' import ChildElement from './Child.vue'; const message = ref('message'); provide('myKey', message); </script> <template> <p>Hello World!</p> <ChildElement /> </template>
然后是一個(gè)Child.vue看起來像這樣的子組件:
<script setup> import GrandChildElement from './GrandChildElement.vue'; </script> <template> <GrandChildElement /> </template>
在GrandChildElement中,我們可以訪問myKey,因?yàn)槲覀冊(cè)诟讣?jí)中provide了它。我們可以在 Child.vue中這樣做,但我們也可以只使用inject。provide使我們能夠從多個(gè)級(jí)別獲取數(shù)據(jù)。要訪問這些數(shù)據(jù)GrandChildElement,我們使用inject.
我們的GrandChildElement.vue文件可能看起來像這樣:
<script setup> import { inject } from 'vue' const message = inject('myKey') </script>
const message這里將返回文本message,因?yàn)檫@是我們?cè)O(shè)置myKey的provide。如果使用的是 Options API,則可以改為
export default { inject: [ 'myKey' ], created() { // Can access this.myKey here } }
到此這篇關(guān)于Vue 中 provide和inject的使用的文章就介紹到這了,更多相關(guān)Vue provide和inject 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue mvvm數(shù)據(jù)響應(yīng)實(shí)現(xiàn)
這篇文章主要介紹了vue mvvm數(shù)據(jù)響應(yīng)實(shí)現(xiàn)的方法,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下2020-11-11Vue中一個(gè)組件調(diào)用其他組件的方法詳解(非父子組件)
vue中最常見子父組件產(chǎn)值,大家一定都很熟悉,最近項(xiàng)目中碰到非父組件中調(diào)用子組件方法的問題,這篇文章主要給大家介紹了關(guān)于Vue中一個(gè)組件調(diào)用其他組件的方法(非父子組件),需要的朋友可以參考下2022-10-10使用vue-draggable-plus實(shí)現(xiàn)拖拽排序
最近遇到一個(gè)需求,在 Vue3 的一個(gè) H5 頁面當(dāng)中點(diǎn)擊拖拽圖標(biāo)上下拖動(dòng) tab 子項(xiàng),然后點(diǎn)擊保存可以保存最新的 tab 項(xiàng)順序,同事說可以用 vue-draggable-plus 這個(gè)庫來實(shí)現(xiàn)拖拽,所以本文給大家介紹了如何使用vue-draggable-plus實(shí)現(xiàn)拖拽排序,需要的朋友可以參考下2024-01-01vue中使用vee-validator完成表單校驗(yàn)方案
vee-validator是一種基于vue模板的輕量級(jí)校驗(yàn)框架。本文主要討論的是vee-validator校驗(yàn)方案,感興趣的朋友跟隨小編一起看看吧2019-11-11使用Element時(shí)默認(rèn)勾選表格toggleRowSelection方式
這篇文章主要介紹了使用Element時(shí)默認(rèn)勾選表格toggleRowSelection方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10vue使用多級(jí)彈窗(Dialog)出現(xiàn)蒙版遮罩問題及解決
這篇文章主要介紹了vue使用多級(jí)彈窗(Dialog)出現(xiàn)蒙版遮罩問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02淺談el-table中使用虛擬列表對(duì)對(duì)表格進(jìn)行優(yōu)化
我們會(huì)經(jīng)常使用表格,如果數(shù)據(jù)量大就直接可以分頁,如果多條可能會(huì)影響表格的卡頓,那么應(yīng)該如何進(jìn)行優(yōu)化,感興趣的可以了解一下2021-08-08van-uploader保存文件到后端回顯后端接口返回的數(shù)據(jù)
前端開發(fā)想省時(shí)間就是要找框架呀,下面這篇文章主要給大家介紹了關(guān)于van-uploader保存文件到后端回顯后端接口返回的數(shù)據(jù),文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06vue3+vite中開發(fā)環(huán)境與生產(chǎn)環(huán)境全局變量配置指南
最近在使用vite生成項(xiàng)目,這篇文章主要給大家介紹了關(guān)于vue3+vite中開發(fā)環(huán)境與生產(chǎn)環(huán)境全局變量配置的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08