码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Vue-中央事件总线(bus)


    文章目录

    • 什么是中央事件总线(bus)
    • 创建中央事件总线


    什么是中央事件总线(bus)

    通过创建一个新的vm对象,专门统一注册事件,供所有组件共同操作,达到所有组件随意隔代传值的效果
    也就是:各个组件内部要传输的数据或者要执行的命令信息,靠bus来通信。

    我们知道子组件向父组件传值可以通过将自定义事件的方法来进行,那么如果我们把事件绑定在所有组件都能访问的地方,然后想要给某个组件通信,直接触发这个事件。

    如何实现:
    主要使用了组件事件的三个方法:

        	//1.触发x组件的a事件: x.$emit("a事件",参数...)
    		//2.给x组件绑定a事件  x.$on("a事件",监听器函数)
    		//3.给x组件解绑a事件  x.$off("a事件",监听器函数)
    
    • 1
    • 2
    • 3
    //在父组件App中
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    //子组件box2中
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    //子组件box3中
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    请添加图片描述
    可以看到bo3接受到了box2传递的数据
    但是这种方法再根节点绑定的代码比较混乱,不利于维护,所以我们需要创建一个组件这个组件,所有组件都能访问。

    创建中央事件总线

    方法一 全局事件总线

    1.在main.js文件中定义
    Vue.prototype.$bus=new Vue({
    	data:{
    		arr:[]  //用来保存事件名
    	},
    	methods:{
    	//绑定事件
    		on(eventname,callback){
    		//判断事件名是否重复
    			if(this.arr.includes(eventname)){
    				throw "eventname events already regist!!"
    			}else{
    				this.arr.push(eventname)
    				this.$on(eventname,callback)
    			}		
    		},
    		//触发事件,传递数据
    		emit(eventname,...arg){
    			this.$emit(eventname,...arg)
    		},
    		解绑
    		off(eventname,callback){
    			this.$off(eventname,callback)
    		}
    	}
    })
    2.使用方法
    this.$bus.emit('定义名称',值) //触发事件 
    this.$bus.on('定义名称' val=>{}) //绑定事件 
    this.$bus.off('定义名称') //解绑
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    方法二、单独创建bus.js文件

    1.在main.js的同级建一个bus.js,
    2.在main.js引入
    import bus from “./bus.js”
    绑定到原型上 Vue.prototype.$bus = bus;

  • 相关阅读:
    【软考软件评测师】基于风险的测试技术
    音视频项目—基于FFmpeg和SDL的音视频播放器解析(十八)
    gulp打包vue3+jsx+less插件
    HAproxy:负载均衡
    3D目标检测实战 | 图解KITTI数据集与数据格式
    【算法】加密解密算法(DES、3DES、SM2、SM3、SM4)以及RSA加密算法
    一:入门案例之查询表中所有数据
    【MindSpore】用coco2017训练Model_zoo上的 yolov4,迭代了两千多batch_size之后报错,大佬们帮忙看看。
    解决Windows 10更新安装失败的问题
    ArrayList 与 顺序表 (附洗牌算法)!
  • 原文地址:https://blog.csdn.net/qq_56973906/article/details/126775013
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号