vue组件之间的传参总结

之前写的Vue 子父组件间的传值_WeiflR10的博客-CSDN博客

一、父传子(prop)

第一步:在父组件中定义数据,例:tohome

 data () {
    return {
      tohome:"给home组件传值",
    }
  },

第二步:在<v-home>上绑定个属性,例:title

<v-home :title="tohome"></v-home>

第三步:子组件利用props接收父组件的传值

 方法一 props:{
      'title':String,
      'bool':Boolean,
      'getFun':Function
  },
 方法二 props:['title','bool','getFun','parent']

第四步:在子组件上绑定传过来的数据

<p>{{title}}</p>

二、子传父($meit)

子组件

<template>
    <div>
        <span>我是子组件</span>
        <button @click="btnClick">点击后给父组件传参</button>
    </div>
</template>

<script>
export default {
    data(){
        return {
            aa:'我是子组件上的信息'
        }
    },
    methods:{
        btnClick(){          
          this.$emit('itemfun',this.aa)
        }
    }
}
</script>

父组件

<template>
    <div>
        <span>我是父组件</span>
        <v-home @itemfun='getapp'></v-home>
        <span>{{data}}</span>
    </div>
</template>

<script>
import home from '../../home'
export default {
    components:{
        'v-home':home
    },
    data(){
        return {
            data:''
        }
    },
    methods:{
        // 获取子组件填写好的值
        getapp(val){
            this.data=val
        }
    }
}
</script>

注:如果子组件没有点击事件给父组件传参,可以使用watch监听

子组件

<template>
    <div>
        <span>我是子组件</span>
    </div>
</template>

<script>
export default {
    data(){
        return {
            aa:''
        }
    },
    // 监听父组件有没有获取到值
    watch: {
        aa: {
            handler (n, o) {
                this.$emit('itemfun', n);
            },
            deep: true
        }
    },
    mounted(){
        this.aa="我是子组件上的信息"
    },
}
</script>

父组件的内容和上面一样

三、$refs

在父组件使用this.$refs可以获取到子组件的所有方法数据

//子组件
<template>
    <div>
        <span>我是子组件</span>
    </div>
</template>

<script>
export default {
    data(){
        return {
            
        }
    }
    
}
</script>


//父组件
<template>
    <div>
        <span>我是父组件</span>
        <v-home ref="refHome"></v-home>
    </div>
</template>

<script>
import home from '../../home'
export default {
    components:{
        'v-home':home
    },
    data(){
        return {
            data:''
        }
    },
    mounted(){
        console.log(this.$refs)  //在父组件输出,可以直接获取home组件的所有数据和方法
    }
}
</script>

运行结果

 四、$parent / $children

注:this就指向Vue实例,所以,this.$parent就是这个页面的父组件;同样的this.$children就是这个页面的子组件;

所以,如果当前在父组件,可以通过this.$children访问子组件的所有数据和方法;如果当前在子组件,可以通过this.$parent访问父组件的所有数据和方法;

如果在子组件1想访问子组件2的所有方法和数据,可以通过this.$parent.$refs也可以通过this.$parent.$children

其实还有很多方法,例如作用域插槽等。可以参考这个文章

Vue组件之间的传参方式小总结_三七安的博客-CSDN博客_vue组件间的参数传递

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值