vue子組件設(shè)計(jì)provide和inject理解使用
引言
閱讀element-ui源碼,發(fā)現(xiàn)在設(shè)計(jì)子組時(shí)件用到了inject屬性,隨即查了一下官方文檔,得知vue在2.2.0版本里新增了provide / inject:
provide 和 inject 主要在開(kāi)發(fā)高階插件/組件庫(kù)時(shí)使用。并不推薦用于普通應(yīng)用程序代碼中。
按照文檔的描述,我的理解是:在多級(jí)嵌套的組件體系中,某級(jí)外層組件可以通過(guò)provide屬性向其下任意一級(jí)子組件提供一個(gè)依賴,不管層級(jí)有多深;而某級(jí)子組件則可以通過(guò)inject屬性接收來(lái)自其上任意一級(jí)父組件提供的依賴(通過(guò)this.xxx形式獲?。?。注意:provide和inject需要一起使用。
舉個(gè)例子說(shuō)明
清朝三位皇帝:康熙(玄燁)、雍正(胤禛)、乾隆(弘歷)是祖孫三代,我們用vue組件的思想表示他們之間的關(guān)系,并模擬他們的一段對(duì)話,以此理解vue中的provide和inject。

調(diào)用組件
——大清帝國(guó):qing-dynasty.vue
<!--組件的嵌套關(guān)系-->
<kangxi>
<yongzheng>
<qianlong></qianlong>
</yongzheng>
</kangxi>定義爺爺組件
——康熙皇帝:kangxi.vue
<template>
<div class="kangxi">
康熙皇帝
<slot></slot>
</div>
</template>
<script>
export default {
name: 'kangxi',
// 爺爺對(duì)兒子提供‘kangxiToYongzheng'
// 對(duì)孫子提供‘kangxiToQianlong'
provide: {
kangxiToYongzheng: '康熙皇帝對(duì)雍正皇帝說(shuō):"你是我兒子"',
kangxiToQianlong: '康熙皇帝對(duì)乾隆皇帝說(shuō):"你是我孫子"'
},
data () {
return {}
}
}
</script>
<style lang="scss">
.kangxi {
width: 200px;
height: 140px;
text-align: center;
background-color: #ffb599;
}
</style>定義兒子組件
——雍正皇帝:yongzheng.vue
<template>
<div class="yongzheng">
雍正皇帝
<slot></slot>
</div>
</template>
<script>
export default {
name: 'yongzheng',
// 兒子接收父親提供的‘kangxiToYongzheng'
inject: ['kangxiToYongzheng'],
// 同時(shí),兒子也給孫子提供‘yongzhengToQianlong'
provide: {
yongzhengToQianlong: '雍正皇帝對(duì)乾隆皇帝說(shuō):"你是我兒子"'
},
data () {
return {}
},
created () {
// 可以通過(guò)this獲取
console.log(this.kangxiToYongzheng, ' 雍正皇帝回答:"是的,爸爸"')
}
}
</script>
<style lang="scss">
.yongzheng {
width: 160px;
height: 100px;
margin: 0 auto;
text-align: center;
background-color: #84b5ff;
}
</style>// 打印結(jié)果
康熙皇帝對(duì)雍正皇帝說(shuō):"你是我兒子" 雍正皇帝回答:"是的,爸爸"
定義孫子組件
——乾?。簈ianlong.vue
<template>
<div class="qianlong">
乾隆皇帝
</div>
</template>
<script>
export default {
name: 'qianlong',
// 孫子接收爺爺?shù)摹甼angxiToQianlong'、父親的‘yongzhengToQianlong'
inject: ['kangxiToQianlong', 'yongzhengToQianlong'],
data () {
return {}
},
created () {
// 可以通過(guò)this獲取
console.log(this.kangxiToQianlong, ' 乾隆皇帝回答:"是的,爺爺"')
console.log(this.yongzhengToQianlong, ' 乾隆皇帝回答:"是的,爸爸"')
}
}
</script>
<style lang="scss">
.qianlong {
width: 120px;
height: 60px;
margin: 0 auto;
text-align: center;
background-color: blanchedalmond;
}
</style>// 打印結(jié)果
康熙皇帝對(duì)乾隆皇帝說(shuō):"你是我孫子" 乾隆皇帝回答:"是的,爺爺"
雍正皇帝對(duì)乾隆皇帝說(shuō):"你是我兒子" 乾隆皇帝回答:"是的,爸爸"
以上就是vue子組件設(shè)計(jì)provide和inject理解使用的詳細(xì)內(nèi)容,更多關(guān)于vue子組件設(shè)計(jì)provide inject的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vuex unknown action type報(bào)錯(cuò)問(wèn)題及解決
這篇文章主要介紹了Vuex unknown action type報(bào)錯(cuò)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
Vue中v-for的數(shù)據(jù)分組實(shí)例
下面小編就為大家分享一篇Vue中v-for的數(shù)據(jù)分組實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
vue+elementUI(el-upload)圖片壓縮,默認(rèn)同比例壓縮操作
這篇文章主要介紹了vue+elementUI(el-upload)圖片壓縮,默認(rèn)同比例壓縮操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
vuex狀態(tài)管理數(shù)據(jù)狀態(tài)查詢與更改方式
這篇文章主要介紹了vuex狀態(tài)管理數(shù)據(jù)狀態(tài)查詢與更改方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
vue開(kāi)發(fā)中關(guān)于axios的封裝過(guò)程
這篇文章主要介紹了vue開(kāi)發(fā)中關(guān)于axios的封裝過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
詳解vue-router的Import異步加載模塊問(wèn)題的解決方案
這篇文章主要介紹了詳解vue-router的Import異步加載模塊問(wèn)題的解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
Vue啟動(dòng)失敗報(bào)錯(cuò):Module?not?found:?Error:?Can‘t?resolve?&apos
這篇文章主要給大家介紹了關(guān)于Vue啟動(dòng)失敗報(bào)錯(cuò):Module?not?found:?Error:?Can‘t?resolve?'less-loader'解決的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03
vue搜索高亮popsearch組件的實(shí)現(xiàn)示例
有時(shí)候給頁(yè)面內(nèi)容添加一個(gè)關(guān)鍵詞搜索功能,如果搜索結(jié)果能夠像瀏覽器搜索一樣高亮顯示,那找起來(lái)就會(huì)很明顯體驗(yàn)會(huì)好很多,本文就來(lái)介紹一下vue搜索高亮popsearch組件的實(shí)現(xiàn)示例,感興趣的可以了解一下2023-09-09

