博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vue通信方法EventBus的实现
阅读量:6304 次
发布时间:2019-06-22

本文共 1412 字,大约阅读时间需要 4 分钟。

  vue通信方式有很多,项目中用的比较多的的有pros、vuex、$emit/$on这3种,还有provide/inject(适合高阶组件)、$attrs和$listeners(适合高阶组件)以及$parent/$child/ref、eventBus等这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(...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];                }            }        }    }复制代码

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

参考链接:

1、
2、

你可能感兴趣的文章
【翻译】使用新的Sencha Cmd 4命令app watch
查看>>
【前台】【单页跳转】整个项目实现单页面跳转,抛弃iframe
查看>>
因为你是前端程序员!
查看>>
数据库设计中的14个技巧
查看>>
Android学习系列(5)--App布局初探之简单模型
查看>>
git回退到某个历史版本
查看>>
ecshop
查看>>
HTML5基础(二)
查看>>
在GCE上安装Apache、tomcat等
查看>>
在Mac 系统下进行文件的显示和隐藏
查看>>
ue4(c++) 按钮中的文字居中的问题
查看>>
技能点
查看>>
读书笔记《乌合之众》
查看>>
Hadoop日记Day1---Hadoop介绍
查看>>
iOS 学习资料汇总
查看>>
centos7 yum安装jdk
查看>>
Bluedroid与BluZ,蓝牙测试方法的变动(基于bludroid和BlueZ的对比)
查看>>
接口和抽象类有什么区别
查看>>
Linux 下添加用户,修改权限
查看>>
请问view controller scene,该如何删除
查看>>