组件之间的通讯:兄弟组件之间的相互通讯(中央事件总线)

组件之间的通讯:

父->子:通过props,data属性

子->父:通过派发事件

兄弟组件:中央事件总线(......data{ Bus:new Vue()}.....)

更为复杂的通讯:就是用vuex

关于兄弟组件之间的通讯官档上推荐使用中央事件总线,我们也确实是这样做的,

中央事件总线,其实就是在父组件data中在实例化话一个vue实例,用于管理组件之间的通讯

假设我们有一个组件A,和B,他们之间的要进行数据通讯,那么他们之间肯定要建立某种联系,这个联系人就是父组件,联系地址就是中央事件总线

然后A,$emit一个信息,B就$on监听这个信息

直接上上例子:

首先先建立一个父组件:

    const myVue=new Vue({
        el:‘#app‘,
        data:{
            Bus:new Vue(),//中央事件总线
        },
        components:{
            myF1:c1,//子组件c1
            myF2:c2//子组件c2
        }
    });

给出子组件的代码:

    const c1={
        template:`<div>
            <p>this is c1 组件</p>
            <span></span>
            </div>`,
        created(){//组件的钩子函数
          this.$root.Bus.$on(‘你的名字‘,value=>{
              this.add(value);
          });
        },
        methods:{
            add(value){
                console.log(value+100);
            }
        },
        beforeDestory(){//组件的钩子函数
            this.$root.Bus.$off("你的名字");
        }
    };

    const c2={
        template:`
            <div>
             <p>this is c2 组件</p>
             <p >
                <button @click="submit">改变</button>
            </p>
             <span></span>
           </div>`,
        methods:{
            submit(){
              //  this.$root.Bus.$emit(‘eventName‘,123);
                this.$parent.Bus.$emit(‘你的名字‘,123);
            },
        },
    };

组件B,,通过父组件的中央事件总线,$emit派发一个事件"你的名字",以及传递一个参数,兄弟组件A,通过父组件的中央事件总线$on,监听那个派发的事件,并接受那个参数。

没任何问题。。。。。。

给出代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>非父子组件之间的通信(中央事件总线)</title>
    <script src="../lib/vue.js"></script>
</head>
<body>
    <div id="app">

        <my-f1></my-f1>
        <my-f2></my-f2>
    </div>
</body>
</html>
<script>
    const c1={
        template:`<div>
            <p>this is c1 组件</p>
            <span></span>
            </div>`,
        created(){
          this.$root.Bus.$on(‘你的名字‘,value=>{
              this.print(value);
          });
        },
        methods:{
            print(value){
                console.log(value);
            }
        },
        beforeDestory(){
            this.$root.Bus.$off("你的名字");
        }
    };

    const c2={
        template:`
            <div>
             <p>this is c2 组件</p>
             <p >
                <button @click="submit">改变</button>
            </p>
             <span></span>
           </div>`,
        methods:{
            submit(){
              //  this.$root.Bus.$emit(‘eventName‘,123);
                this.$parent.Bus.$emit(‘你的名字‘,123);
            },
        },
    };
    const myVue=new Vue({
        el:‘#app‘,
        data:{
            Bus:new Vue(),
        },
        components:{
            myF1:c1,
            myF2:c2
        }
    });
</script>
时间: 2024-10-29 10:45:45

组件之间的通讯:兄弟组件之间的相互通讯(中央事件总线)的相关文章

Vue bus的使用(兄弟|非父子组件传值)--&gt;可以使用一个空的Vue实例作为中央事件总线new Vue()

1.在main.js中注册全局的bus  Vue.prototype.bus=new Vue(); 2.在组建中使用 子组建使用:this.bus.$emit('自定义事件名',data) methods:{        handleClicks(){        this.bus.$emit('openMenu',true)       } } 父组建使用:  this.bus.$on("自定义事件名", msg => {}) mounted() {    this.bus

vue的$emit 与$on父子组件与兄弟组件的之间通信

本文主要对vue 用$emit 与 $on 来进行组件之间的数据传输. 主要的传输方式有三种: 1.父组件到子组件通信 2.子组件到父组件的通信 3.兄弟组件之间的通信 一.父组件传值给子组件 父组件给子组件传子,使用props //父组件:parent.vue <template> <div> <child :vals = "msg"></child> </div> </template> <script&

vue的组件通讯 父传子 -- 子传父-- 兄弟组件的传值 vue的组件传值

首先文字简单撸一下 父子传子   -------首先在父组件上绑定一个属性,在子组件里用props接收,可以是数组或者是对象 子传父   ------在父组件升上自定义一个方法,在子组件里通过this.$emit("父组件上的方法名",a)     /-------a------/代表需要传递的参数        兄弟组件通讯   需要创建一个公共的vue 实例, new vue()    在main.js里 书写Vue.prototype .com=new vue()    通过pr

vue2.0s中eventBus实现兄弟组件通信

在vue1.0中,组件之间的通信主要通过vm.$dispatch沿着父链向上传播和用vm.$broadcast向下广播来实现.然而在vue2.0中,已经废除了这种用法. vuex加入后,对组件之间的通信有了更加清晰的操作,对于中大型的项目来说,一开始就把vuex的使用计划在内是明智的选择. 然而在一些小型的项目,或者说像我这样写到一半才发现vue2.0用不了$.broadcast和$dispatch的人来说,就需要一个比较便捷的解决方法.那么,eventBus的作用就体现出来了. 主要是现实途径

Vue2.x 兄弟组件之间的数据传递

兄弟组件之间的数据传递 思路:创建三个组件分别是<my-aaa>.<my-bbb>.<my-ccc>,在<my-ccc>中接收<my-aaa>与<my-bbb>发送的数据,当改变<my-aaa>或<my-bbb>所发送的数据时,<my-ccc>接收的数据也随之改变 html <body> <div id="box"> <my-aaa></

事件总线bus解决兄弟组件之间的传值

原文引用https://www.dazhuanlan.com/2019/08/25/5d625951eff92/ 事件总线bus解决兄弟组件之间的传值 实际运用: 封装一个Bus.js 123 import Vue from 'vue'const Bus = new Vue()export default Bus 在组件调用时引入 组件一: 1234567891011121314 import Bus from './Bus' export default { data() { return {

vue父子组件、兄弟组件之间的通信和访问

注意:比较复杂的嵌套类的通信问题都建议使用vuex 一.父组件->子组件 (1)直接关系: 1. 属性传值(props) 2. $children(数组) 3. $refs (2)跨多层关系: 1. provide / inject 二.子组件->父组件 (1)直接关系: 1. 事件传值 2. $parent (2)跨多层关系: 1. 暂无 三.兄弟组件 (1)使用事件中心,实例化一个空的 Vue 实例(建议使用vuex) 原文地址:https://www.cnblogs.com/zhangr

vue.js组件之间通讯--父组件调用子组件的一些方法,子组件暴露一些方法,让父组件调用

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><div id="app"></div></body><script src="node_modules/vue/

React 组件基本使用(3) ---父子组件之间的通信

当有多个组件需要共享状态的时候,这就需要把状态放到这些组件共有的父组件中,相应地,这些组件就变成了子组件,从而涉及到父子组件之间的通信.父组件通过props 给子组件传递数据,子组件则是通过调用父组件传给它的函数给父组件传递数据. 很简单的一个例子,我们在输入框中输入温度,输入框下面显示冷和热.这里就有两个组件,输入框和它下面的显示内容,且它们共享一个状态,就是温度.所以我们要把温度这个状态放到这两个组件的父组件中.这里就有三个组件,一个输入框TemperatureInput,  一个是显示内容