PubSub-js的语法:
例子
浏览器输出结果
模块名称:pub-sub.js
vue的双向数据绑定大家应该很熟悉了,当一方的值发生改变时,另一方绑定的值也会随之变化,用起来是挺嗨的。
但是在原生中我们怎么使用这种机制呢?
最近有个需求是通过对接websocket获取后台服务器实时变化的值,推送给web端使用。
基于这个需求,我使用到了js中的设计模式-观察者模式。
那么,让我们来一起了解一下吧。
先来看看具体机制:
这里对象定义了四个属性,分别绑定四个函数。
1、订阅:订阅方通过传递回调函数,观察者模式把这个回调函数push到自身的订阅功能里,以此来得知谁订阅了,然后判断是否要推送。
2、退订:找到对应的回调函数,然后在自身的订阅功能里把当前函数删除掉
3、发布:循环所有的订阅方,当发布方进行发送的时候,把对应的数据推送给订阅方
4、发布订阅:定义一个对象,使其具备订阅并且发布的功能
流程是这样,说起来头头是道的,问题是怎么使用?
举个栗子:
我想定义一个对象,使其具备发布订阅功能,发布方数值改变的时候,订阅方得到平方值得变化
这里通过input框的change事件,模拟了数据的实时变更,然后把当前值进行发布,这边一发布,订阅方就能通过回调函数得到实时变化的值,然后得到值进行相应的操作。
效果:
这样就能简单实现数据变更推送功能了。
注:文件中引入的observer的js是最上面提到的观察者模式的那一套流程,tools的js大家可以不必在意,是我自己原生封装的$函数,用来获取dom元素的。
具体需求,大家还需要变通,稍作修改。
好了,以上就是js的观察者模式实现的双向数据绑定。
如有问题,请指出,接受批评。
消息订阅与发布(pubsub)
1、一种组件间通信的方式,适用于任意组件间通信
2、使用步骤:
1、安装pubsub: npm i pubsub-js
3、接受数据:A组件想接受数据,则在A组件中订阅消息,订阅的回调留在A组件自身。
methods(){
demo(data){....}
....
mounted(){
this.pubId = pubsub.subscribe('xxx',this.demo) //订阅消息 或者直接在内部写成箭头函数形式
}
}
4、提供数据: pubsub.publish('xxx',数据)
5、最好在beforeDestrory钩子中,用pubsub.unsubscribe(pubId)去取消订阅
步骤:
哪个组件接受数据 就在哪个组件中订阅消息,订阅的回调留在自身。
发送消息: