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中暂停功能的实现代码
Mar 04 Javascript
function, new function, new Function之间的区别
Mar 08 Javascript
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
Dec 28 Javascript
javascript 获取模态窗口的滚动位置代码
Aug 06 Javascript
js中return false(阻止)的用法
Aug 14 Javascript
详解JS函数重载
Dec 04 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
Jan 31 Javascript
详解Bootstrap创建表单的三种格式(一)
Jan 04 Javascript
JavaScript 实现同时选取多个时间段的方法
Oct 17 Javascript
在pycharm中开发vue的方法步骤
Mar 04 Javascript
viewer.js实现图片预览功能
Jun 24 Javascript
在vue中使用Base64转码的案例
Aug 07 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中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
php单态设计模式(单例模式)实例
2014/11/18 PHP
YII Framework框架教程之日志用法详解
2016/03/14 PHP
php表单处理操作
2017/11/16 PHP
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
javascript获取所有同类checkbox选项(实例代码)
2013/11/07 Javascript
原生javaScript做得动态表格(注释写的很清楚)
2013/12/29 Javascript
jquery动态改变form属性提交表单
2014/06/03 Javascript
js实现图片从左往右渐变切换效果的方法
2015/02/06 Javascript
阿里云ecs服务器中安装部署node.js的步骤
2016/10/08 Javascript
vue实现添加标签demo示例代码
2017/01/21 Javascript
javascript history对象详解
2017/02/09 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
Vue.directive使用注意(小结)
2018/08/31 Javascript
Vue渲染过程浅析
2019/03/14 Javascript
vue 实现模糊检索并根据其他字符的首字母顺序排列
2019/09/19 Javascript
vue插槽slot的简单理解与用法实例分析
2020/03/14 Javascript
跟老齐学Python之用Python计算
2014/09/12 Python
Python之修改图片像素值的方法
2019/07/03 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
python文字转语音实现过程解析
2019/11/12 Python
new_zeros() pytorch版本的转换方式
2020/02/18 Python
Appium+Python实现简单的自动化登录测试的实现
2021/01/26 Python
美国孕妇装购物网站:Motherhood Maternity
2019/09/22 全球购物
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
New delete 与malloc free 的联系与区别
2013/02/04 面试题
工厂门卫岗位职责
2013/11/25 职场文书
自我评价的写作规则
2014/01/06 职场文书
绿色环保演讲稿
2014/05/10 职场文书
学校募捐倡议书
2014/05/14 职场文书
重大事项社会稳定风险评估方案
2014/06/15 职场文书
园林技术专业求职信
2014/07/28 职场文书
2015年医药代表工作总结
2015/04/25 职场文书
工程质量保证书
2015/05/09 职场文书
ipad隐藏软件app图标方法
2022/04/19 数码科技