「后端小伙伴来学前端了」Vue中全局事件总线(GlobalEventBus)原理及探究过程

简介: 「后端小伙伴来学前端了」Vue中全局事件总线(GlobalEventBus)原理及探究过程

QQ截图20220525213631.png


前言


上一篇文章写了 Vue 中的自定义事件,自定义事件是全局事件总线基础。我在上一篇文章中埋下了一个小小的伏笔。如下图:


QQ截图20220525213725.png


我说过,在Vue中如果我们用(@orv-on )给组件绑定上一个自定义事件,其本质就是给子组件VueComponentvc绑定一个事件,然后子组件通过this.$emit()触发,父组件监听到再执行回调方法。这种也只适合于父子组件之间通信,对于兄弟组件来说,仍然无法非常方便的通信。


那全局事件总线是什么样的呢?


一、全局事件总线前述


提供一个思考方向:


微信截图_20220525213750.png


其他组件同样如此。


那么到这一步,我们要明白一件事情哈,全局事件总线,全局两个字,意思是在全局都能够访问到。并且能够绑定方法呢?


xxxx中保证要能够有$on、$off、$emit这些方法,才能够实现组件间通信。


那么只有哪里有??


我们之前给子组件绑定自定义事件的时候,其本质是不是给子组件的实例对象new VueComponent绑定上一个自定义事件。


在这个全局事件总线中,我们就不能再给每个组件的实例对象来绑定自定义事件了,而是要将自定义事件绑定到一个全部组件都能够访问的对象上。


那么那个对象大家都能够访问?看下图吧。


微信截图_20220525213816.png


---图:来自于尚硅谷-张天宇老师


我们将它放在vue原型上,那么全局事件总线就能够做到任意间组件通信拉。


二、安装全局事件总线


我们弄明白要去找谁了,就要将它定义出来,不然怎么用啊。


标准定义如下:


import Vue from 'vue'
import App from './App.vue'
Vue.config.productionTip = false
// 关于全局总线的使用说明
// 使用全局总线的时候,更好的应用是在兄弟组件、祖孙组件之间,这些组件他们并不能做到直接通信,这个使用全局事件总线会方便很多
new Vue({
  render: h => h(App),
  // beforeCreate 位于数据挂载之前的生命周期函数
  beforeCreate () {
    // 安装全局事件总线   $bus就是当前应用的vm  这里的this就是当前的new Vue()
    Vue.prototype.$bus = this
  }
}).$mount('#app')


beforCreate()方法


是众多生命周期中最前面的一个。在此时,它的this就是当前的vue.


微信截图_20220525213849.png


三、使用全局事件总线


1、接收数据:A组件想接收数据,则在A组件中给$bus绑定自定义事件,事件的回调留在A组件自身。即是图示中的第一步。


// 回车增加一个todo
addTodo (todo) {
    this.todos.unshift(todo)
},
    // 判断勾选不勾选
    checkTodo (id) {
        this.todos.forEach((todo) => {
            if (todo.id === id) todo.done = !todo.done
        })
    },
        // 删除一个todo
        deleteTodo (id) {
            this.todos = this.todos.filter(todo => todo.id !== id)
        },
            // 全选全不选
            checkAllTodos (done) {
                this.todos.forEach((todo) => { todo.done = done })
            },
                // 清除所有已完成的任务
                clearDoneTodos () {
                    this.todos = this.todos.filter(todo => !todo.done)
                }
},
    // 在加载完成后就进行全局总线的绑定
    mounted () {
        this.$bus.$on('addTodo', this.addTodo)
        this.$bus.$on('checkTodo', this.checkTodo)
        this.$bus.$on('deleteTodo', this.deleteTodo)
    },


2、提供数据:this.$bus.$emit('xxxx',数据)


methods: {
    add () {
      // 1. 检查输入合法性
      const title = this.title.trim()
      if (!title) {
        alert('请输入内容')
        return
      }
      const id = uuidv4()
      // 2. 根据输入生成一个todo对象
      const todo = { id, title, done: false }
      // 3. 添加到todos
      this.$bus.$emit('addTodo', todo)
      // 4. 清除输入
      this.title = ''
    }
  }
}


注意:最后在beforeDestory钩子中,用$off去解绑当前组件所用到的事件。


如下图:


微信截图_20220525213927.png


解绑有多种方式,$off() 不写参数,是直接解绑全部


一个参数$off('xxx')是解绑一个,解绑多个可以写成$off(['xx','xxx'])


后语


大家一起加油!!!如若文章中有不足之处,请大家及时指出,在此郑重感谢。


纸上得来终觉浅,绝知此事要躬行。

大家好,我是博主宁在春主页

一名喜欢文艺却踏上编程这条道路的小青年。

希望:我们,待别日相见时,都已有所成


目录
相关文章
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
1261 1
|
10月前
|
存储 前端开发 安全
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
389 5
|
移动开发 前端开发 JavaScript
Vue与React两大前端框架的主要差异点
以上就是Vue和React的主要差异点,希望对你有所帮助。在选择使用哪一个框架时,需要根据项目的具体需求和团队的技术栈来决定。
754 83
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
757 70
|
存储 消息中间件 前端开发
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
校园圈子系统校园论坛小程序采用uni-app前端框架,支持多端运行,结合PHP后端(如ThinkPHP/Laravel),实现用户认证、社交关系管理、动态发布与实时聊天功能。前端通过组件化开发和uni.request与后端交互,后端提供RESTful API处理业务逻辑并存储数据于MySQL。同时引入Redis缓存热点数据,RabbitMQ处理异步任务,优化系统性能。核心功能包括JWT身份验证、好友系统、WebSocket实时聊天及活动管理,确保高效稳定的用户体验。
754 4
PHP后端与uni-app前端协同的校园圈子系统:校园社交场景的跨端开发实践
|
JavaScript 前端开发 编译器
Vue与TypeScript:如何实现更强大的前端开发
Vue.js 以其简洁的语法和灵活的架构在前端开发中广受欢迎,而 TypeScript 作为一种静态类型语言,为 JavaScript 提供了强大的类型系统和编译时检查。将 Vue.js 与 TypeScript 结合使用,不仅可以提升代码的可维护性和可扩展性,还能减少运行时错误,提高开发效率。本文将介绍如何在 Vue.js 项目中使用 TypeScript,并通过一些代码示例展示其强大功能。
535 22
|
前端开发 算法 NoSQL
前端uin后端php社交软件源码,快速构建属于你的交友平台
这是一款功能全面的社交软件解决方案,覆盖多种场景需求。支持即时通讯(一对一聊天、群聊、文件传输、语音/视频通话)、内容动态(发布、点赞、评论)以及红包模块(接入支付宝、微信等第三方支付)。系统采用前后端分离架构,前端基于 UniApp,后端使用 PHP 框架(如 Laravel/Symfony),配合 MySQL/Redis 和自建 Socket 服务实现高效实时通信。提供用户认证(JWT 集成)、智能匹配算法等功能,助力快速上线,显著节约开发成本。
540 2
前端uin后端php社交软件源码,快速构建属于你的交友平台
|
人工智能 监控 前端开发
AI工具:前端与后端的终极对决?谁将成为新时代的宠儿?
深入探讨AI工具对前端和后端开发的具体影响、各自的机遇与挑战,并分析未来开发者如何驾驭AI,实现能力跃迁。
758 0
|
10月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
785 2
|
9月前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
661 137

热门文章

最新文章