vue 组件之间的通讯

使用 Vue 构建组件容易,与之相伴的就是 Vue 组件之间的通讯方式

 

父子组件间通讯

    父组件向子组件通讯

          要在 Vue 中将数据从父组件传到子组件,我们可以通过 props 来实现。将数据从父组件传到子组件,在父组件中设置一个属性,该属性绑定和子组件的 prop 相同的名称的属性值。

    子组件向父组件通讯

         在子组件中发出自定义事件,并在父组件中侦听发出的事件(子组件中自定义的事件)

 

兄弟组件通讯

     在Vue中实现兄弟组件的通讯也有几种,其中一种方法是让父组件充当两个子组件之间的中间件(中继);另一种就是使用EventBus(事件总线),它允许两个子组件之间直接通讯,而不需要依靠父组件;

   1、通过父组件进行兄弟组件之间的通讯,兄弟组件 A 和 B 是通过其父组件作为中间媒介进行通信;

       (1)、在A组件 AsendToB() 方法中,将发出一个事件,触发父组件对AsendTo事件侦听器,触发父组件 ParentsendToB() 方法。

       (2)、父组件声明了ParentsendToB()方法,该方法接受上面发送的自定义事件,并将其传递给B组件

       (3)、这样,B 组件就可以在 props 属性值中访问来自A组件的数据。

 

   2、通过EventBus进行兄弟间组件通讯

        随着应用程序越来越庞大,通过父组件来传递所有内容会把事情变得越来越棘手,不过我们还有另外一种选择,那就是使用 EventBus 架起兄弟之间通讯的桥梁。

 

以下时EventBus通讯

首先在 main.js 文件中定义一个新的eventBus对象,其实它是一个全新的Vue实例

// main.js
import Vue from 'vue'
import App from './App'
 
export const eventBus = new Vue()
 
new Vue({
    el: '#app',
    render: h => h(App)
})

 

接着在新创建的 A 组件中导入 main.js

<script>
    import { eventBus } from '../main'
</script>

 

methods: {
    AsendToB() {
        eventBus.$emit('A', 'This is a!(^_^)!!!')
    }
}

 

在新创建的 B 组件中导入 main.js

<script>
    import { eventBus } from '../main'
</script>

 

在created() 生命周期钩子添加 eventBus ,启动自定义事件的侦听器。当使用 B 组件时,该侦听器将开始运行并且会保持运行。下面的代码只是侦听 A 组件自定义事件,然后触发回调,将作为自定义事件的有效负载传递给侦听器。

 

posted on 2022-03-09 15:29  zhishiyv  阅读(52)  评论(0编辑  收藏  举报

导航