Vue学习之--------全局事件总线(2022/8/22)

简介: 这篇文章介绍了Vue中全局事件总线(GlobalEventBus)的概念和使用方法,它允许不同组件之间进行通信。文章通过图解和代码实例详细解释了如何安装全局事件总线、在组件中接收和提供数据,以及如何在组件销毁前解绑事件,以避免潜在的内存泄漏问题。

文章目录

  • 1、全局事件总线基础知识(GlobalEventBus)
  • 2、图解过程
  • 3、代码实例
    • 3.1 main.js
    • 3.1 App.vue
    • 3.2 School.vue
    • 3.3 Student.vue

1、全局事件总线基础知识(GlobalEventBus)

1、一种组件间通信的方式,适用于任意组件间通信。

2、安装全局事件总线:

提示:在main.js中安装全局事件总线

   new Vue({
       ......
       beforeCreate() {
           Vue.prototype.$bus = this //安装全局事件总线,$bus就是当前应用的vm
       },
       ......
   })

3、使用事件总线:

  1. 接收数据:A组件想接收数据,则在A组件中给$bus绑定自定义事件,事件的回调留在A组件自身。
      methods(){
        demo(data){......}
      }
      ......
      mounted() {
        this.$bus.$on('xxxx',this.demo)
      }
  1. 提供数据:this.$bus.$emit('xxxx',数据)

4、最好在beforeDestroy钩子中,用$off去解绑当前组件所用到的事件。


2、图解过程

在这里插入图片描述

在这里插入图片描述

3、代码实例

实现组件间的通信(通过全局事件总线)

3.1 main.js

//引入Vue
import Vue from 'vue'
//引入App
import App from './App.vue'
//关闭Vue的生产提示
Vue.config.productionTip = false

//创建vm
new Vue({
    el:'#app',
    render: h => h(App),
    beforeCreate() {
        Vue.prototype.$bus = this
    },
})

3.1 App.vue

<template>
    <div class="app">
        <h1>{
  
  {msg}}</h1>
        <School/>
        <Student/>
    </div>
</template>

<script>
    import Student from './components/Student'
    import School from './components/School'

    export default {
        name:'App',
        components:{School,Student},
        data() {
            return {
                msg:'你好啊!',
            }
        }
    }
</script>

<style scoped>
    .app{
        background-color: gray;
        padding: 5px;
    }
</style>

3.2 School.vue

<template>
    <div class="school">
        <h2>学校名称:{
  
  {name}}</h2>
        <h2>学校地址:{
  
  {address}}</h2>
    </div>
</template>

<script>
    export default {
        name:'School',
        data() {
            return {
                name:'尚硅谷',
                address:'北京',
            }
        },
        mounted() {
            // console.log('School',this)
            this.$bus.$on('hello',(data)=>{
                console.log('我是School组件,收到了数据',data)
            })
        },
        beforeDestroy() {
            this.$bus.$off('hello')
        },
    }
</script>

<style scoped>
    .school{
        background-color: skyblue;
        padding: 5px;
    }
</style>

3.3 Student.vue

<template>
    <div class="student">
        <h2>学生姓名:{
  
  {name}}</h2>
        <h2>学生性别:{
  
  {sex}}</h2>
        <button @click="sendStudentName">把学生名给School组件</button>
    </div>
</template>

<script>
    export default {
        name:'Student',
        data() {
            return {
                name:'张三',
                sex:'男',
            }
        },
        mounted() {
            // console.log('Student',this.x)
        },
        methods: {
            sendStudentName(){
                this.$bus.$emit('hello',this.name)
            }
        },
    }
</script>

<style lang="less" scoped>
    .student{
        background-color: pink;
        padding: 5px;
        margin-top: 30px;
    }
</style>
相关文章
|
4月前
|
JavaScript
解释 Vue 的事件总线和 emits 属性。
解释 Vue 的事件总线和 emits 属性。
54 3
|
4月前
|
JavaScript
在Vue中,如何使用事件总线来传递数据和触发事件?
在Vue中,如何使用事件总线来传递数据和触发事件?
56 0
|
4月前
|
JavaScript 程序员
Vue中的全局事件总线是什么?如何使用?
Vue中的全局事件总线是什么?如何使用?
56 0
|
4月前
|
JavaScript 前端开发 API
从入门到项目实战 - VUE组件跨通信:vue2 与 vue3 中实现全局事件总线
从入门到项目实战 - VUE组件跨通信:vue2 与 vue3 中实现全局事件总线
276 0
|
4月前
【Vue2.0学习】—全局事件总线GlobalEventBus(六十一)
【Vue2.0学习】—全局事件总线GlobalEventBus(六十一)
|
9月前
|
JavaScript
Vue全局事件总线(任意组件间通信)
Vue全局事件总线(任意组件间通信)
|
9月前
【Vue2.0】— 全局事件总线GlobalEventBus(十九)
【Vue2.0】— 全局事件总线GlobalEventBus(十九)
|
JavaScript
Vue(Vue2+Vue3)——44.全局事件总线、45.TodoList案例_事件总线
Vue(Vue2+Vue3)——44.全局事件总线、45.TodoList案例_事件总线
|
JavaScript
[Vue]全局事件总线
[Vue]全局事件总线
|
JavaScript
Vue —— 进阶脚手架(五)(全局事件总线、消息订阅与发布)
Vue —— 进阶脚手架(五)(全局事件总线、消息订阅与发布)
111 0