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 相关文章推荐
prototype1.4中文手册
Sep 22 Javascript
html组件不可输入(只读)同时任何组件都有效
Apr 01 Javascript
JavaScript中的连字符详解
Nov 28 Javascript
Jquery Ajax解析XML数据(同步及异步调用)简单实例
Feb 12 Javascript
AngularJS HTML编译器介绍
Dec 06 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
May 06 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
Jun 24 Javascript
js控制div层的叠加简单方法
Oct 15 Javascript
关于ES6箭头函数中的this问题
Feb 27 Javascript
JS实现的合并多个数组去重算法示例
Apr 11 Javascript
如何解决webpack-dev-server代理常切换问题
Jan 09 Javascript
express如何解决ajax跨域访问session失效问题详解
Jun 20 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保存二进制原始数据为图片的程序代码
2014/10/14 PHP
Yii配置文件用法详解
2014/12/04 PHP
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
2018/03/31 PHP
利用js跨页面保存变量做菜单的方法
2008/01/17 Javascript
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
Javascript 中 null、NaN和undefined的区别总结
2013/04/10 Javascript
JQuery限制复选框checkbox可选中个数的方法
2015/04/20 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
2016/10/17 Javascript
使用SVG基本操作API的实例讲解
2017/09/14 Javascript
vue中设置height:100%无效的问题及解决方法
2018/07/27 Javascript
vue完成项目后,打包成静态文件的方法
2018/09/03 Javascript
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
[03:52]显微镜下的DOTA2第三期——英雄在无聊的时候干什么
2014/06/20 DOTA
Python常用知识点汇总
2016/05/08 Python
KMP算法精解及其Python版的代码示例
2016/06/01 Python
关于Python中异常(Exception)的汇总
2017/01/18 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
python使用opencv驱动摄像头的方法
2018/08/03 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
解决PySide+Python子线程更新UI线程的问题
2019/01/11 Python
Python3 Tkinkter + SQLite实现登录和注册界面
2019/11/19 Python
python shutil文件操作工具使用实例分析
2019/12/25 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
在脚本中单独使用django的ORM模型详解
2020/04/01 Python
next在python中返回迭代器的实例方法
2020/12/15 Python
HTML5的结构和语义(3):语义性的块级元素
2008/10/17 HTML / CSS
出纳会计岗位职责
2014/03/12 职场文书
国际贸易本科毕业生求职信
2014/09/26 职场文书
2015年教师党员自我评价材料
2015/03/04 职场文书
2015年村党支部工作总结
2015/04/30 职场文书
React四级菜单的实现
2022/04/08 Javascript