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

調用組件
——大清帝國:qing-dynasty.vue
<!--組件的嵌套關系-->
<kangxi>
<yongzheng>
<qianlong></qianlong>
</yongzheng>
</kangxi>定義爺爺組件
——康熙皇帝:kangxi.vue
<template>
<div class="kangxi">
康熙皇帝
<slot></slot>
</div>
</template>
<script>
export default {
name: 'kangxi',
// 爺爺對兒子提供‘kangxiToYongzheng'
// 對孫子提供‘kangxiToQianlong'
provide: {
kangxiToYongzheng: '康熙皇帝對雍正皇帝說:"你是我兒子"',
kangxiToQianlong: '康熙皇帝對乾隆皇帝說:"你是我孫子"'
},
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'],
// 同時,兒子也給孫子提供‘yongzhengToQianlong'
provide: {
yongzhengToQianlong: '雍正皇帝對乾隆皇帝說:"你是我兒子"'
},
data () {
return {}
},
created () {
// 可以通過this獲取
console.log(this.kangxiToYongzheng, ' 雍正皇帝回答:"是的,爸爸"')
}
}
</script>
<style lang="scss">
.yongzheng {
width: 160px;
height: 100px;
margin: 0 auto;
text-align: center;
background-color: #84b5ff;
}
</style>// 打印結果
康熙皇帝對雍正皇帝說:"你是我兒子" 雍正皇帝回答:"是的,爸爸"
定義孫子組件
——乾?。簈ianlong.vue
<template>
<div class="qianlong">
乾隆皇帝
</div>
</template>
<script>
export default {
name: 'qianlong',
// 孫子接收爺爺的‘kangxiToQianlong'、父親的‘yongzhengToQianlong'
inject: ['kangxiToQianlong', 'yongzhengToQianlong'],
data () {
return {}
},
created () {
// 可以通過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>// 打印結果
康熙皇帝對乾隆皇帝說:"你是我孫子" 乾隆皇帝回答:"是的,爺爺"
雍正皇帝對乾隆皇帝說:"你是我兒子" 乾隆皇帝回答:"是的,爸爸"
以上就是vue子組件設計provide和inject理解使用的詳細內容,更多關于vue子組件設計provide inject的資料請關注腳本之家其它相關文章!
相關文章
Vuex unknown action type報錯問題及解決
這篇文章主要介紹了Vuex unknown action type報錯問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02
vue+elementUI(el-upload)圖片壓縮,默認同比例壓縮操作
這篇文章主要介紹了vue+elementUI(el-upload)圖片壓縮,默認同比例壓縮操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
詳解vue-router的Import異步加載模塊問題的解決方案
這篇文章主要介紹了詳解vue-router的Import異步加載模塊問題的解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05
Vue啟動失敗報錯:Module?not?found:?Error:?Can‘t?resolve?&apos
這篇文章主要給大家介紹了關于Vue啟動失敗報錯:Module?not?found:?Error:?Can‘t?resolve?'less-loader'解決的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-03-03

