loading...
Vue组件通讯
Published in:2022-02-06 | category: Vue
Words: 839 | Reading time: 3min | reading:

Vue组件的三种常用的传值方式在日常工作中是用的非常多的,非常重要!

在进行下面的介绍之前,首先要搞清楚什么是父组件,子组件和兄弟组件,下面是他们的介绍

  1. 父组件向子组件传值
    父组件向子组件共享传递数据需要使用自定义属性,示例代码如下:
//父组件里面的主要内容

//使用子组件,自定义属性名称将父组件的两个数据暴露给子组件,例如//我这使用了msg和user,然后子组件中同样使用msg与user接收数据,
//同样注意是通过数据绑定的方式传递
<Child :msg="message" :user="suerinfo"></Child>
//下面这一行是引入子组件,子组件的定义名称为Child,之后记得注册
import Child from './路径名/child.vue'
data(){
    return{
        message:'hello vue.js'
        userinfo:{ name:'hh',age:20}
    }
}
//子组件里面的内容
<template>
    <view>
        <p>父组件传递过来的msg值:{{msg}}</p>
        <p>父组件传递过来的user值:{{user}}</p>
    </view>
</template>
//通过自定义属性接收父组件传过来的参数,这里的属性名称一定要与父组件保持一致(msg,user),注意不要更改props里面的属性值,因为里面的属性是只读的,同时修改之后这样也会导致父子组件的值不同。
props:['msg','user']

最后简单总结就是:父组件绑定自定义属性,传值;子组件在props里面声明。
2. 子组件向父组件传值
子组件向父组件共享传递数据使用自定义事件。示例代码如下:

//子组件(child.vue)中的内容
export default {
    data() {
        return { child_data_:0}
    },
    methods: {
        add() {
            this.child_data+=2
            //第一步
            //子组件修改数据时,通过$emit()触发自定义事件
            //这里填写监听事件与想要传递给父组件的数据
            this.$emit('dataChange',this.child_data)
        }
    }
}
//父组件中的内容
//第二步
//其实就等于事件监听,监听子组件中的child_data的数据变化)
<Child @datachange = "change"></Child>

export default {
    data() {
        return { fahter_data :0}
    },
    methods: {
        //第三步
        change(val){
            //这里的val其实就是子组件传递过来的child_data
            //下面这句代码说白了就是起到一个转存的作用
            this.father_data = val
        }
    }
}

3.兄弟组件之间的数据传值
在vue2.x的版本中,兄弟组件之间的数据共享使用的是EventBus
基本步骤:

  • 建立eventBus.js模块,并向外共享一个Vue的实例对象
  • 在发送方组件中调用EventBus.$emit(‘事件名称’,要发送的数据)来触发自定义事件
  • 在接收方组件,调用EventBus.$on(‘事件名称’,事件处理函数)
    来注册一个自定义事件

下面是示例代码:

//兄弟组件(数据发送方)
import eventBus from './eventBus.js'
export default {
    data() {
        return {
            data:'hello'
        }
    },
    methods: {
        snedData(){
            eventBus.$emit('share',this.data)
        }
    }
}
//eventBus.js
import Vue from 'vue'
//向外共享Vue的实例对象
export default new vue()
//兄弟组件(数据接收方)
import eventBus from './eventBus.js'
export default {
    data(){
        return {
            receive_data:' '
        }
    },
    created(){
        eventBus.$on('share',val =>{
            this.receive_data = val
        })
    }
}

最后简单总结三种传值关系就是:
父向子传数据使用自定义属性
子向父传数据使用自定义事件
兄弟组件之间传送数据使用EventBus

Prev:
Grid布局