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 相关文章推荐
IE中直接运行显示当前网页中的图片 推荐
Aug 31 Javascript
js实现无需数据库的县级以上联动行政区域下拉控件
Aug 14 Javascript
高效的获取当前元素是父元素的第几个子元素
Oct 15 Javascript
jquery获得option的值和对option进行操作
Dec 13 Javascript
js函数内变量的作用域分析
Jan 12 Javascript
javascript实现简单的二级联动
Mar 19 Javascript
Javascript实现检测客户端类型代码封包
Dec 03 Javascript
js实现文字垂直滚动和鼠标悬停效果
Dec 31 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
Dec 15 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
Nov 16 Javascript
jquery实现侧边栏左右伸缩效果的示例
Dec 19 jQuery
浅谈vue中resetFields()使用注意事项
Aug 12 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中COOKIES使用示例
2015/07/26 PHP
微信公众号开发之通过接口删除菜单
2017/02/20 PHP
ThinkPHP中create()方法自动验证实例
2017/04/26 PHP
关于PHP5.6+版本“No input file specified”问题的解决
2019/12/11 PHP
ie 调试javascript的工具
2009/04/29 Javascript
读jQuery之二(两种扩展)
2011/06/11 Javascript
JavaScript学习笔记之JS事件对象
2015/01/22 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
基于jquery animate操作css样式属性小结
2015/11/27 Javascript
基于javascript实现tab切换特效
2016/03/29 Javascript
Easyui 之 Treegrid 笔记
2016/04/29 Javascript
Easyui Treegrid改变默认图标的方法
2016/04/29 Javascript
JS小数运算出现多为小数问题的解决方法
2016/06/02 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
2016/09/21 Javascript
javascript正则表达式模糊匹配IP地址功能示例
2017/01/06 Javascript
详解vue+css3做交互特效的方法
2017/11/20 Javascript
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
解决vue单页面应用打包后相对路径、绝对路径相关问题
2020/08/14 Javascript
virtualenv实现多个版本Python共存
2017/08/21 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
2018/03/13 Python
django 发送手机验证码的示例代码
2018/04/25 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
2019/02/19 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
2020/04/27 Python
CSS3效果:自定义“W”形运行轨迹实例
2017/03/29 HTML / CSS
基于HTML5陀螺仪实现ofo首页眼睛移动效果的示例
2017/07/31 HTML / CSS
电脑教师的自我评价
2013/12/18 职场文书
10的分与合教学反思
2014/04/30 职场文书
写求职信有哪些注意事项
2014/05/08 职场文书
安全演讲稿开场白
2014/08/25 职场文书
上课迟到检讨书300字
2014/10/15 职场文书
2015秋季幼儿园开学通知
2015/07/16 职场文书
OpenCV3.3+Python3.6实现图片高斯模糊
2021/05/18 Python
2022新作动画《福星小子》释出宣传影片 加入内田真礼&宫野真守配音演出
2022/04/08 日漫
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js