vue 父组件如何给子组件的组件传值 provide inject

一般情况下我们父子之间的传值用的是props,这个就不多说了,但是如果想让父给子组件的组件传值怎么办呢,这里我们就可以用到 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>

这样我们就可以操作父组件的添加方法,得到子孙组件的响应

原文地址:https://www.cnblogs.com/yhhBKY/p/11725476.html

时间: 2024-07-30 08:29:19

vue 父组件如何给子组件的组件传值 provide inject的相关文章

vue 父页面中含子页面滑动,滑动结束,底部组件进行滑动

详见效果地址: https://pan.baidu.com/s/1Yin2q0Fh_6AQJTlbie7QMw 使用 1.v-touch 实现滑动效果,父级页面滑动,当父级含有子页面需要滑动功能hasClass("sm_img"),需要判断是否继续父级滑动,有的话子页面先滑动,通过upB去判断 if($(imgShowChild[that.childNum]).children().children().hasClass("sm_img")&&tha

vue父组件获取子组件的属性或方法

我遇到这样一个情况: 父组件代码片段: 1 <button @click="submit">提交</button> 2 <v-autoTextarea ref="autotext" placeholder="开始编辑..." class="content-input" fontSize="15px" 3 lineHeight="1.5" :value=&qu

vue组件之间的通信以及如何在父组件中调用子组件的方法和属性

在Vue中组件实例之间的作用域是孤立的,以为不能直接在子组件上引用父组件的数据,同时父组件也不能直接使用子组件的数据 一.父组件利用props往子组件传输数据 父组件: <div> <child v-bind:my-message="parentMsg"></child>//注意传递参数时要用-代替驼峰命名,HTML不区分大小写 </div> 子组件: Vue.component('child', { // camelCase in Ja

Vue 父组件传值到子组件

vue 父组件给子组件传值中 这里的AccessList就是子组件 如果 是静态传值的话直接  msg="xxx"就好 这里动态取值的话就  :msg=xxxxx _________________________________华丽的分割线___________________________________ 子组件接收 好了就这样可以直接用了 原文地址:https://www.cnblogs.com/powerbyming/p/9130043.html

Vue 父组件向子组件传值,传方法,传父组件整体

父子组件传值 1.父组件调用子组件时绑定属性,例如-> :title="title" 2.子组件中在props中声明title:props:['title','msg'] 3.就可以在子组件中引用title Tips:避免父子组件传值时命名冲突 父子组件传方法方式一样 1.父组件调用子组件时绑定属性,例如-> :run="run" 2.子组件中props中声明run:props:['title','msg','run'] 3.子组件中的button引用r

【vue】父组件主动调用子组件 /// 非父子组件传值

一  父组件主动调用子组件: 注意:在父组件使用子组件的标签上注入ref属性,例如: <div id="home"> <v-header ref="header"></v-header> <hr> 首页组件 <button @click="getChildData()">获取子组件的数据和方法</button> </div> 父组件主动获取子组件的数据和方法: 1

Vue父组件调用子组件的方法

vue中如果父组件想调用子组件的方法,可以在子组件中加上ref,然后通过this.$refs.ref.method调用,例如: 父组件: <template> <div @click="fatherMethod"> <child ref="child"></child> </div> </template> <script> import child from '~/componen

Vue最常用的组件通讯有三种:父-&gt;子组件通讯、子-&gt;父组件通讯,兄弟组件通讯.(template用的pug模板语法)

Vue最常用的组件通讯有三种:父->子组件通讯.子->父组件通讯,兄弟组件通讯.(template用的pug模板语法) 1.父->子组件通讯 父->子组件通讯,是通过props进行数据传递,并且具有这几个特性,单向传递,子组件接收的数据不可以更改,如果更改,会发出警告,每次父组件更新时,子组件的所有 prop 都会更新为最新值. 1 父组件 2 <template lang="pug"> 3 .father 4 Children(:name='msg

Vue 父组件循环使用refs调用子组件方法出现undefined的问题

1. 背景 最近前端项目遇到一个问题,我在父组件中使用了两个相同的子组件child,分别设置ref为add和update.其中A组件的功能是新增,也就是说在页面上A页面只有一个.而update组件是放在表格里的,表格中的每一行数据都有update组件.跟update组件并列还有一个删除按钮,每次删除完都会重新获取数据. 2.问题描述 界面第一次加载时我对表格的组件B进行操作的时候是没问题的,但是当我删除某一行的数据之后再点击B组件,出现了update组件变为undefined的问题. <el-t