vue父組件給子組件的組件傳值provide inject的方法
一般情況下我們父子之間的傳值用的是props,這個(gè)就不多說(shuō)了,但是如果想讓父給子組件的組件傳值怎么辦呢,這里我們就可以用到 provide 和 inject(依賴注入)
provide/inject需要一起使用,我們可以從父組件的provide傳值,子組件或者孫組件,就可以用inject來(lái)接受子組件的provide屬性值
具體的可以看官網(wǎng)介紹provide/inject:https://cn.vuejs.org/v2/api/#provide-inject
下面我們可以寫個(gè)簡(jiǎn)單的例子來(lái)演示一下
父組件parent,我們?cè)诶锩嬉肓艘粋€(gè)子組件provideChild
<template> <div> <button @click="add">點(diǎn)擊增加</button> <provideChild/> </div> </template> <script> import provideChild from '@/components/provideChild' export default { components:{provideChild}, data () { return { foo:5 } }, //依賴注入傳值 provide(){ return{ newFoo:this.foo } }, methods:{ add(){ this.foo ++ }, } } </script>
子組件provideChild,我們同時(shí)又在子組件里面引入了一個(gè)他的組件
我們可以看到他的打印出注入的newFoo值5
<template> <section> <div>我是子組件:{{newFoo}}</div> <childChild/> </section> </template> <script> import childChild from '@/components/childChild' export default { components:{ childChild }, inject:['newFoo'], mounted(){ console.log(this.newFoo) }, } </script>
孫子組件childChild
<template> <div>我是子組件的組件:{{newFoo}}</div> </template> <script> export default { inject:['newFoo'], } </script>
接下來(lái)我們可以看一下頁(yè)面的
是可以展示的出來(lái)的,但是我們點(diǎn)擊增加的時(shí)候,子組件們都沒(méi)有響應(yīng),如果此時(shí)你有好好看文檔的話,就應(yīng)該猜出為什么了
provide必須是個(gè)對(duì)象inject的綁定值才可以響應(yīng),那么我們可以試一試
//parent父組件的寫法 <template> <div> <button @click="add">點(diǎn)擊增加</button> <provideChild/> </div> </template> <script> import provideChild from '@/components/provideChild' export default { components:{provideChild}, data () { return { fooObj:{ foo:5 } } }, //依賴注入傳值 provide(){ return{ newFoo:this.fooObj } }, methods:{ add(){ this.fooObj.foo ++ }, } } </script> //子組件provideChild <template> <section> <div>我是子組件:{{newFoo.foo}}</div> <childChild/> </section> </template> <script> import childChild from '@/components/childChild' export default { components:{ childChild }, inject:['newFoo'], mounted(){ console.log(this.newFoo) }, } </script> //孫子組件childChild <template> <div>我是子組件的組件:{{newFoo.foo}}</div> </template> <script> export default { inject:['newFoo'], } </script>
這樣我們就可以操作父組件的添加方法,得到子孫組件的響應(yīng)
以上就是本次介紹的全部相關(guān)知識(shí)點(diǎn),感謝大家的學(xué)習(xí)和對(duì)腳本之家的支持。
相關(guān)文章
vue如何利用axios調(diào)用后臺(tái)api接口
這篇文章主要介紹了vue如何利用axios調(diào)用后臺(tái)api接口問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07Vue3中Vuex狀態(tài)管理學(xué)習(xí)實(shí)戰(zhàn)示例詳解
這篇文章主要為大家介紹了Vue3中Vuex狀態(tài)管理學(xué)習(xí)實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06vue3?setup語(yǔ)法糖之組件傳參(defineProps、defineEmits、defineExpose)示例詳
defineProps?和?defineEmits?都是只能在?<script?setup>?中使用的編譯器宏,他們不需要導(dǎo)入,且會(huì)隨著?<script?setup>?的處理過(guò)程一同被編譯掉,這篇文章主要介紹了vue3?setup語(yǔ)法糖之組件傳參(defineProps、defineEmits、defineExpose)示例詳解,需要的朋友可以參考下2023-01-01Vue項(xiàng)目自動(dòng)轉(zhuǎn)換 px 為 rem的實(shí)現(xiàn)方法
這篇文章主要介紹了Vue項(xiàng)目自動(dòng)轉(zhuǎn)換 px 為 rem的實(shí)現(xiàn)方法,本文是通過(guò)一系列的配置后,轉(zhuǎn)換成熱門,具體內(nèi)容詳情大家跟隨小編一起通過(guò)本文學(xué)習(xí)吧2018-10-10Vue實(shí)現(xiàn)鼠標(biāo)經(jīng)過(guò)文字顯示懸浮框效果的示例代碼
這篇文章主要介紹了Vue實(shí)現(xiàn)鼠標(biāo)經(jīng)過(guò)文字顯示懸浮框效果,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10基于vue寫一個(gè)全局Message組件的實(shí)現(xiàn)
這篇文章主要介紹了基于vue寫一個(gè)全局Message組件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08VUE中使用TypeScript裝飾器實(shí)現(xiàn)表單驗(yàn)證的全過(guò)程
這篇文章主要給大家介紹了關(guān)于如何在VUE中使用TypeScript裝飾器實(shí)現(xiàn)表單驗(yàn)證的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03