You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
consteventHub=createEventHub();letcreateEventHubVariable=1;consthandler=data=>{console.log(data);}// hub订阅了myEvent, myEvent2 两个事件// 其中myEvent事件注册了两个回调handler 和 匿名函数eventHub.on('myEvent',handler);eventHub.on('myEvent',()=>{console.log('I am handler 2');console.log('eventHub',eventHub)});eventHub.on('myEvent2',()=>{createEventHubVariable++;console.log('eventHub',eventHub);});// 某些用户或者数据变化产生的交互:发布// 传入不同的参数,执行回调handler, 同时也会执行上面注册的匿名函数eventHub.emit('myEvent','I am a string');eventHub.emit('myEvent',{arg: 'I am a object'});eventHub.emit('myEvent2');// 只移除了handler, 匿名函数还是在的eventHub.off('myEvent',handler)
初学者都会用的订阅-发布模式
只要我们操作过DOM,都已经使用过订阅发布模式了,即使初学那会并不知道我们用了这种模式,看下这段代码:
只要用户点击了id是
myId
的DOM元素,就会自动执行注册的匿名函数这里相当于订阅了这个DOM节点的
click
事件,然后等待用户发布事件当然,我们也可以随意的增加多个订阅者,或者删除订阅者
订阅-发布的简单实现
除了常见的DOM事件,在日常业务开发中,我们经常会碰到需要实现自定义事件的场景,或者我们常用的vue框架也是利用订阅发布模式来实现的
下面我们一步步来实现一个简单的订阅发布模式,以下是核心步骤
hub
,用于存放回调函数on
,订阅事件,并注册回调函数,保存到发布者的缓存列表中emit
,发布事件,执行对应事件的回调函数off
使用方式
Demo
下面的完整代码都可以在这里找到codepen: 订阅-发布模式, 自己随意改改代码就知道来龙去脉了
The text was updated successfully, but these errors were encountered: