vue 兄弟组件间传值 EventBus

本文详细介绍了如何在Vue项目中使用EventBus进行组件间的通信,包括创建EventBus、引入实例、监听与递交事件以及重要性的销毁监听,以防止内存泄露。通过实例展示了在A、B两个页面间如何传递数据,强调了在页面生命周期中管理EventBus的重要性。
摘要由CSDN通过智能技术生成

大家或许都听说EventBus,或者说或多或少都了解过,他可以在任何两个组件中进行传值,不局限于父子、祖孙或是兄弟组件,也可以说他是一种发布——订阅的设计模式。

我将使用拆分为五个步骤:创建、引入、监听、递交、销毁

1、创建

// 创建一个EventBus.js文件

// 引入

import Vue from 'vue' 

// 创建实例

const EventBus = new Vue() 

// 导出

export default EventBus

2、 引入 有两种方法

1. 使用import引入

import EventBus from '../EventBus'

2.使用Vue原型链引入

// 在 src 的 main.js 中,加上以下代码

// 引入第一步创建好的 EventBus

import EventBus from './EventBus'

// 这个方式可以在任何组件里直接用 this.$EventBus 调用

Vue.prototype.$EventBus = EventBus

// 也可以直接这样使用,不需要第一步的创建

 import Vue from 'vue'

Vue.prototype.$EventBus = new Vue()

3、监听

要使用监听方法,只要调用EventBus下的$on方法 (使用Vue原型链引入

(使用Vue原型链引入

<template>

    <div>

         <h3>页面A</h3>

         <router-link to="/b"> 跳转B页面 </router-link>

    </div>

</template>

<script>

export default {

     created () {

         console.log('----A页面监听事件----')

        // 使用Vue原型链引入

        this.$EventBus.$on('getNum', (num) => {

            console.log('num', num)

        })

     }

}

</script>

4、 递交  

只要调用EventBus下的$emit方法  

使用Vue原型链引入

<template>

     <div>

         <h3>B页面</h3>

         <router-link to="/a"> 跳转A页面 </router-link>

     </div>

</template>

<script>

export default {

    created () {

         console.log('----B页面递交事件----')

         const num = 2

         // 使用Vue原型链引入

         this.$EventBus.$emit('getNum', num)

    }

}

</script>

5、销毁

如果不对监听事件销毁,会导致了内存泄露

应该在调用 方法()页面的生命周期中添加$off()

// a.vue 添加$off方法,防止内存泄露

beforeDestroy () {

     console.log('----A页面销毁监听事件----')

     this.$EventBus.$off('getNum')

}

 完整代码

a页面

<template>

   <div>

      <h3>页面A</h3>

        <router-link to="/b"> 跳转B页面 </router-link>

    </div>

</template>

<script>

export default {

    created () {

     console.log('----A页面监听事件----')

       // 使用Vue原型链引入

      this.$EventBus.$on('getNum', (num) => {

          console.log('num', num)

      })

   },

   beforeDestroy () {

      console.log('----A页面销毁监听事件----')

      // 使用Vue原型链引入

      this.$EventBus.$off('getNum')

   }

}

</script>

b页面

<template>

      <div>

       <h3>B页面</h3>

        <router-link to="/a"> 跳转A页面 </router-link>

      </div>

</template>

<script>

export default {

     created () {

        console.log('----B页面递交事件----')

        const num = 2

        // 使用Vue原型链引入

        this.$EventBus.$emit('getNum', num)

     }

}

</script> 

创建eventBus->引入同一个实例->绑定(订阅)监听事件->递交(发布)事件->销毁监听事件 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值