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ō)明
清朝三位皇帝:康熙(玄燁)、雍正(胤禛)、乾?。ê霘v)是祖孫三代,我們用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)文章
vue.js實(shí)例todoList項(xiàng)目
本篇文章主要介紹了vue.js實(shí)例todoList項(xiàng)目,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07Vue?Hook?封裝通用型表格的詳細(xì)過(guò)程
這篇文章主要介紹了Vue?Hook?封裝通用型表格,設(shè)計(jì)通用型表格組件首先,需要設(shè)計(jì)一個(gè)基礎(chǔ)的表格組件,它接受列配置、數(shù)據(jù)和分頁(yè)信息等參數(shù),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08詳解vue-router的導(dǎo)航鉤子(導(dǎo)航守衛(wèi))
這篇文章主要介紹了詳解vue-router的導(dǎo)航鉤子(導(dǎo)航守衛(wèi)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11詳解vue項(xiàng)目的構(gòu)建,打包,發(fā)布全過(guò)程
小編給大家通過(guò)本文詳細(xì)介紹了關(guān)于vue.js項(xiàng)目的構(gòu)建、打包、發(fā)布的全過(guò)程,文章很以后價(jià)值,值得你參考。2017-11-11vue-element的select下拉框賦值實(shí)例
這篇文章主要介紹了vue-element的select下拉框賦值實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03vue實(shí)現(xiàn)app頁(yè)面切換動(dòng)畫(huà)效果實(shí)例
本篇文章主要介紹了vue實(shí)現(xiàn)app頁(yè)面切換動(dòng)畫(huà)效果實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05解決vue 界面在蘋(píng)果手機(jī)上滑動(dòng)點(diǎn)擊事件等卡頓問(wèn)題
這篇文章主要介紹了vue 界面在蘋(píng)果手機(jī)上滑動(dòng)點(diǎn)擊事件等卡頓解決方案,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11vue指令?v-bind的使用和注意需要注意的點(diǎn)
這篇文章主要給大家分享了?v-bind的使用和注意需要注意的點(diǎn),下面文章圍繞?v-bind指令的相關(guān)資料展開(kāi)內(nèi)容且附上詳細(xì)代碼?需要的小伙伴可以參考一下,希望對(duì)大家有所幫助2021-11-11vue實(shí)現(xiàn)多個(gè)元素或多個(gè)組件之間動(dòng)畫(huà)效果
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)多個(gè)元素或多個(gè)組件之間動(dòng)畫(huà)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09