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 相关文章推荐
Raphael一个用于在网页中绘制矢量图形的Javascript库
Jan 08 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
Apr 26 Javascript
jQuery实现滚动切换的tab选项卡效果代码
Aug 26 Javascript
jQuery中的基本选择器用法学习教程
Apr 14 Javascript
javascript 玩转Date对象(实例讲解)
Jul 11 Javascript
JSON对象转化为字符串详解
Aug 11 Javascript
Vue内容分发slot(全面解析)
Aug 19 Javascript
基于node.js express mvc轻量级框架实践
Sep 14 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
Apr 11 Javascript
详解vue项目中调用百度地图API使用方法
Apr 25 Javascript
es6函数name属性功能与用法实例分析
Apr 18 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
Dec 30 jQuery
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
CI框架装载器Loader.php源码分析
2014/11/04 PHP
PHP实现函数内修改外部变量值的方法示例
2018/12/28 PHP
Yii框架引入coreseek分页功能示例
2019/02/08 PHP
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
使用jQuery解决IE与FireFox下createElement方法的差异
2013/11/14 Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
javascript记住用户名和登录密码(两种方式)
2015/08/04 Javascript
Vue表单实例代码
2016/09/05 Javascript
Bootstrap Scrollspy源码学习
2017/03/02 Javascript
vue2中,根据list的id进入对应的详情页并修改title方法
2018/08/24 Javascript
nodejs中函数的调用实例详解
2018/10/31 NodeJs
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
JS实现鼠标移动拖尾
2020/12/27 Javascript
[01:00]DOTA2 store: Collection of Artisan's Wonders
2015/08/12 DOTA
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
python读文件逐行处理的示例代码分享
2013/12/27 Python
python判断完全平方数的方法
2018/11/13 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
2019/04/10 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
2019/08/06 Python
pandas的相关系数与协方差实例
2019/12/27 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
《蒙娜丽莎之约》教学反思
2014/02/27 职场文书
水电维修专业推荐信
2014/09/06 职场文书
个人四风问题对照检查材料
2014/10/01 职场文书
考生诚信考试承诺书(2016版)
2016/03/25 职场文书
2016年企业安全生产月活动总结
2016/04/06 职场文书
创业计划书之书店
2019/09/10 职场文书
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS
springboot layui hutool Excel导入的实现
2022/03/31 Java/Android
React更新渲染原理深入分析
2022/12/24 Javascript