vue通信方式EventBus的实现代码详解


Posted in Javascript onJune 10, 2019

vue通信方式有很多,项目中用的比较多的的有 pros、vuex、$emit/$on 这3种,还有 provide/inject (适合高阶组件)、 $attrs$listeners (适合高阶组件)以及 $parent/$child/refeventBus 等这3种方式。很多时候我们都是只会使用api,而懂得原理以及实现,但我就觉得懂得原理以及实现跟一个只会调用api的开发人员时不在同一层次的。所以这里就像把跨组件通信的 eventBus 通信的原理给大家展示一下。这也是自己学到大佬的的东西后并在此记录(转载)一下。

class EventBus{
    constructor(){
      this.event=Object.create(null);
    };
    //注册事件
    on(name,fn){
      if(!this.event[name]){
        //一个事件可能有多个监听者
        this.event[name]=[];
      };
      this.event[name].push(fn);
    };
    //触发事件
    emit(name,...args){
      //给回调函数传参
      this.event[name]&&this.event[name].forEach(fn => {
        fn(...args)
      });
    };
    //只被触发一次的事件
    once(name,fn){
      //在这里同时完成了对该事件的注册、对该事件的触发,并在最后并取消该事件。
      const cb=(...args)=>{
        //触发
        fn.apply(this,args);
        //取消
        this.off(name,fn);
      };
      //监听
      this.on(name,cb);
    };
    //取消事件
    off(name,offcb){
      if(this.event[name]){
        let index=this.event[name].findIndex((fn)=>{
          return offcb===fn;
        })
        this.event[name].splice(index,1);
        if(!this.event[name].length){
          delete this.event[name];
        }
      }
    }
  }

以上代码用的是发布订阅模式。

总结

以上所述是小编给大家介绍的vue通信方式EventBus的实现代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
Javascript实现的分页函数
Dec 22 Javascript
jquery数组过滤筛选方法grep()简介
Jun 06 Javascript
在JavaScript中正确引用bind方法的应用
May 11 Javascript
javascript实现2016新年版日历
Jan 25 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
Apr 29 Javascript
Bootstrap学习笔记之css组件(3)
Jun 07 Javascript
轻松理解JavaScript闭包
Mar 14 Javascript
将angular.js项目整合到.net mvc中的方法详解
Jun 29 Javascript
JS实现图片手风琴效果
Apr 17 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
Sep 26 Javascript
微信小程序时间戳转日期的详解
Apr 30 Javascript
详解小程序如何动态绑定点击的执行方法
Nov 26 Javascript
Vue将页面导出为图片或者PDF
Aug 17 #Javascript
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
Jun 10 #jQuery
发布订阅模式在vue中的实际运用实例详解
Jun 09 #Javascript
为vue项目自动设置请求状态的配置方法
Jun 09 #Javascript
解决vue单页面应用中动态修改title问题
Jun 09 #Javascript
Vue动态修改网页标题的方法及遇到问题
Jun 09 #Javascript
详解Node.js异步处理的各种写法
Jun 09 #Javascript
You might like
给php新手谈谈我的学习心得
2007/02/25 PHP
php魔术方法与魔术变量、内置方法与内置变量的深入分析
2013/06/03 PHP
php读取目录所有文件信息dir示例
2014/03/18 PHP
Codeigniter控制器controller继承问题实例分析
2016/01/19 PHP
YII框架关联查询操作示例
2019/04/29 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
document.getElementById的简写方式(获取id对象的简略写法)
2010/09/10 Javascript
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
jquery 取子节点及当前节点属性值
2014/07/25 Javascript
浏览器缩放检测的js代码
2014/09/28 Javascript
使用Javascript简单实现图片无缝滚动
2014/12/05 Javascript
js识别uc浏览器的代码
2015/11/06 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
js常用DOM方法详解
2017/02/04 Javascript
ie下js不执行的几种可能
2017/02/28 Javascript
js实现本地时间同步功能
2017/08/26 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
小程序实现抽奖动画
2020/04/16 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
2020/11/12 Javascript
[02:07]TI9显影之尘系列 - Vici Gaming
2019/08/20 DOTA
Python Tkinter简单布局实例教程
2014/09/03 Python
Python实现两个list对应元素相减操作示例
2017/06/09 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
2019/06/27 Python
python实现按行分割文件
2019/07/22 Python
PyCharm2018 安装及破解方法实现步骤
2019/09/09 Python
python GUI计算器的实现
2020/10/09 Python
用python爬虫批量下载pdf的实现
2020/12/01 Python
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
艺术设计专业个人求职信
2014/04/10 职场文书
党员批评与自我批评范文
2014/09/23 职场文书
班主任先进事迹材料
2014/12/17 职场文书
城南旧事观后感
2015/06/11 职场文书
课程设计感想范文
2015/08/11 职场文书
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server
Android开发手册TextInputLayout样式使用示例
2022/06/10 Java/Android