vue provide/inject 父组件如何给孙子组件传值
一般情况下我们父子组件之间的传值用的是props,这个就不多说了,但是如果想让父组件给子组件的组件传值怎么办呢,如果还用props的话肯能会比较复杂,这里我们就可以用到 provide 和 inject(依赖注入),当然provide/inject也支持父子组件的传值
provide/inject需要一起使用,我们可以从父组件的provide传值,子组件或者孙组件,就可以用inject来接受子组件的provide属性值
具体的可以看官网介绍provide/inject
下面我们可以写个简单的例子来演示一下
父组件parent,我们在里面引入了一个子组件provideChild
<template>
<div>
<button @click="add">点击增加</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>
接下来我们可以看一下页面的

是可以展示的出来的,但是我们点击增加的时候,子组件们都没有响应,如果此时你有好好看文档的话,就应该猜出为什么了

provide必须是个对象inject的绑定值才可以响应,那么我们可以试一试
//parent父组件的写法
<template>
<div>
<button @click="add">点击增加</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>
这样我们就可以操作父组件的添加方法,得到子孙组件的响应

vue provide/inject 父组件如何给孙子组件传值的更多相关文章
- Vue provide/inject 部分源码分析 实现响应式数据更新
provide/inject 数据响应式更新的坑及源码解析 下面是我自己曾经遇到 一个问题,直接以自己QA的形式来写吧 自问自答了,需要的同学也可以直接访问segmentfault地址 官网给出实例, ...
- vue高级组件之provide / inject
转载:https://blog.csdn.net/Garrettzxd/article/details/81407199 在vue中不同组件通信方式如下 1.父子组件,通过prop 2.非父子组件,通 ...
- vue 组件传值$attrs $listeners $bus provide/inject $parent/$children
$attrs 包含了父作用域中不作为prop被识别的特性绑定,当一个组件没有声明props时,这里会包含所有父作用域的绑定, $listeneers 包含了父作用域中的v-on事件监听器,它可以通过v ...
- provide inject应用及和props对比
之前本人写过几篇element ui源码解析,其中提到provide/inject,当时只是匆匆带过,没有做深入研究,直到后来一次开发,需要实现孙组件更改父组件的值才想起来,原来这一对属性有如此大的用 ...
- vue $attrs 父组件和孙子组件的传值,传函数
上一篇我们说到provide/inject的依赖注入的传值方法,今天我们来说一下另一个父组件给孙子组件的传值方式$attrs 我们接着上一个例子继续来写 parent父组件 我们给child子组件穿了 ...
- vue组件通讯之provide / inject
什么是 provide / inject [传送门] vue的组件通讯方式我们熟知的有 props $emit bus vuex ,另外就是 provide/inject provide/inject ...
- vue 父子组件传值的另外一种方式 provide inject
1.文档说明 https://cn.vuejs.org/v2/api/#provide-inject 2.实例 element ui的dropdown组件 dropdown.vue: provide( ...
- 组件的通信 :provide / inject 对象进入后,就等于不用props,然后内部对象,直接复制可以接受数组,属性不能直接复制,可以用Object.assgin覆盖对象,或者Vue的set 双向绑定数据
组件的通信 :provide / inject 对象进入后,就等于不用props,然后内部对象,直接复制可以接受数组,属性不能直接复制,可以用Object.assgin覆盖对象,或者Vue的set 双 ...
- Vue.js最佳实践--给大量子孙组件传值(provide/inject)
开发中有个需求,有个Parent组件(例如div)下,输入框,下拉框,radiobutton等可编辑的子孙组件几百个,根据某个值统一控制Parent下面的所有控件的disabled状态 类似于这样,给 ...
随机推荐
- 60.Median of Two Sorted Arrays(两个排序数组的中位数)
Level: Hard 题目描述: There are two sorted arrays nums1 and nums2 of size m and n respectively. Find t ...
- 44.Linked List Cycle II(环的入口节点)
Level: Medium 题目描述: Given a linked list, return the node where the cycle begins. If there is no cy ...
- hibernate 参数一览
实现包含了Hibernate与数据库的基本连接信息的配置方式有两种方式: 第一种是使用hibernate.properties文件作为配置文件. 第二种是使用hibernate.cfg.xml文件作为 ...
- ThinkPhp学习
页面跳转 界面跳转是很常用的操作,所以基于ubuntu16系统,这周学习了ThinkPHP页面跳转和重定向. 页面跳转 系统的Think\Controller类内置了两个页面跳转方法err ...
- windows server 进入组策略管理
方法: win+R 然后输入 gpmc.msc 即可在域服务器上进行组策略管理了.
- 转载:tomcat性能的优化
考虑一下这种场景,你开发了一个应用,它有十分 优秀的布局设计,最新的特性以及其它的优秀特点.但是在性能这方面欠缺,不管这个应用如何都会遭到客户拒绝.客户总是期望它们的应用应该有更好的性能.如 果你在产 ...
- WaitForSingleObject的作用[转]
在多线程的情况下,有时候我们会希望等待某一线程完成了再继续做其他事情(比如主线程等待子线程结束完之后,自己再结束),要实现这个目的,可以使用Windows API函数WaitForSingleObje ...
- C语言的文件操作
在操作系统中,为了统一对各种硬件的操作,简化接口,不同的硬件设备也被看成一个文件.对于这些文件的操作,等于是对普通文件的操作.例如,通常把显示器称为标准输出文件,printf就是想这个文件输出,把键盘 ...
- range类型(Python)
range 不是 iterator >>> R = range(3) >>> next(R) Traceback (most recent call last): ...
- Antd Vue 问题集合
1.table列宽问题 在滚动列时,如果要指定列宽,不要指定所有列宽,至少预留一列不执行列宽. 同时:scroll="{ x: width}", width的值要是所有列的宽度之和 ...