vue父組件給子組件的組件傳值provide inject的方法
一般情況下我們父子之間的傳值用的是props,這個就不多說了,但是如果想讓父給子組件的組件傳值怎么辦呢,這里我們就可以用到 provide 和 inject(依賴注入)
provide/inject需要一起使用,我們可以從父組件的provide傳值,子組件或者孫組件,就可以用inject來接受子組件的provide屬性值
具體的可以看官網(wǎng)介紹provide/inject:https://cn.vuejs.org/v2/api/#provide-inject
下面我們可以寫個簡單的例子來演示一下
父組件parent,我們在里面引入了一個子組件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,我們同時又在子組件里面引入了一個他的組件
我們可以看到他的打印出注入的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>
接下來我們可以看一下頁面的

是可以展示的出來的,但是我們點(diǎn)擊增加的時候,子組件們都沒有響應(yīng),如果此時你有好好看文檔的話,就應(yīng)該猜出為什么了

provide必須是個對象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)知識點(diǎn),感謝大家的學(xué)習(xí)和對腳本之家的支持。
相關(guān)文章
vue3通過組合鍵實(shí)現(xiàn)換行操作的示例詳解
這篇文章主要為大家詳細(xì)介紹了vue3如何通過組合鍵,例如command+Enter、shift+Enter、alt + Enter,實(shí)現(xiàn)換行操作,感興趣的可以了解下2024-03-03
Vue el-table復(fù)選框全部勾選及勾選回顯功能實(shí)現(xiàn)
這篇文章主要介紹了Vue el-table復(fù)選框全部勾選及勾選回顯功能實(shí)現(xiàn),本文通過示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-05-05
Vue-cli Eslint在vscode里代碼自動格式化的方法
本篇文章主要介紹了Vue-cli Eslint在vscode里代碼自動格式化的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02
詳解vue3.2新增的defineCustomElement底層原理
本文主要介紹了vue3.2新增的defineCustomElement底層原理,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08
vue實(shí)現(xiàn)樹形結(jié)構(gòu)增刪改查的示例代碼
其實(shí)很多公司都會有類似于用戶權(quán)限樹的增刪改查功能,本文主要介紹了vue實(shí)現(xiàn)樹形結(jié)構(gòu)增刪改查,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09
vue使用keep-alive進(jìn)行組件緩存方法詳解(組件不緩存問題解決)
keep-alive包裹動態(tài)組件時,會緩存不活動的組件實(shí)例,而不是銷毀它們,下面這篇文章主要給大家介紹了關(guān)于vue使用keep-alive進(jìn)行組件緩存方法(組件不緩存問題解決)的相關(guān)資料,需要的朋友可以參考下2022-09-09

