怎么在vue中利用组件传值实现观察者模式?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
Vue.prototype Bus 美元;=,new vue ()
我们往vue的原型里注册了一个全局变量美元的公共汽车,他的值是vue的实例,也就是说,到现在为止,公交车里美元边有了vue所有的属性和方法,这下就好操作了
第二步,我们开始发送消息
这就很符合观察者模式的发布订阅模式
我们在组件1中写如下代码:
& lt; template> ,,,& lt; div> ,,,,,,,& lt; button @click=皊end"在发送& lt;/button> ,,,& lt;/div> & lt;/template> & lt; script> export default  { ,,,方法:,{ ,,,,,,,send (), { ,,,,,,,,,,,这个。汽车。释放美元(“send" & # 39;接收的信息& # 39;) ,,,,,,,} ,,,} } & lt;/script>
点击按钮发送一条信息,这个按钮也就是充当发布者,我们用到vue美元的发出了这个api,那么订阅者是什么呢?我不说你也应该想到了,对,就是他
第三步,在组件三中接收消息
& lt; template> ,,,& lt; div> ,,,,,,,{{消息}} ,,,& lt;/div> & lt;/template> & lt; script> export default  { ,,,data (), { ,,,,,,,return { ,,,,,,,,,,,的信息:,& # 39;& # 39; ,,,,,,,} ,,,}, ,,,mounted (), { ,,,,,,,这个。汽车。美元(& # 39;发送# 39;,,(味精),=祝辞,{ ,,,,,,,,,,,this.message =,味精 ,,,,,,,}) ,,,} } & lt;/script>
就是用美元在这个属性充当接收者
从上可以看的出,vue很多地方用到了观察者的思想,包括他的双向绑定也是如此
vue的机制
从上图我们可以看的出,vue是通过Object.defineProperty实现对数据的劫持,然后中间做了一个中转,最后渲染到vue层。
我们可以肯定的是,vue.js借鉴了观察者模式,但是我感觉还是有点区别的,观察者模式跟注重的是事件驱动,比如我买房这个动作,第一次和销售了解可能没有合适的房源,然后销售就会跟你说:“如果有合适的房源我们会第一时间通知你& # 39;,当有新房源的时候他会给你打电话通知你,这一系列的根源是买房这个事件,他驱动了整套流程。而vue我们都知道是数据驱动,也就是只里有数据的值发生改变的话,Object.defineProperty才会对他劫持,从而去更新dom,触发视图的更新。
那么有没有更符合观察者模式特征的?
当然是node . js的事件事件了。
首先我们看看事件的工作流程:
var events =,要求(& # 39;事件# 39;);//,创建,eventEmitter 对象 var eventEmitter =, new events.EventEmitter ();//,创建事件处理程序 var connectHandler =, function 连接(),{ ,,console.log(& # 39;连接成功# 39;公司); ,,//,触发,data_received 事件, ,,eventEmitter.emit (& # 39; data_received& # 39;); }//,绑定,connection 事件处理程序 eventEmitter.on(& # 39;连接# 39;,,connectHandler);//,使用匿名函数绑定,data_received 事件 eventEmitter.on (& # 39; data_received& # 39;,,函数(){ ,,console.log(& # 39;数据接收成功# 39;公司); });//,触发,connection 事件, eventEmitter.emit(& # 39;连接# 39;); console.log(“程序执行完毕!”);
输出一下:
这就完全符合观察者的工作模式,由排放发布,由上接收。所以说,节点。js提供了很好的监听机制,还有他对整个事务的处理。其支持了nodejs最特色的I/O模式,比如我们启动http服务时会监听其连接/关闭,http。请求时会监听数据/等。
还有没有类似的案例呢?
当然,js有一个事件监听者——addEventListener,也有点观察者的意思,具体用法我就不说了,想必大家用的都很熟悉。
其实只要你认真想一想,还是有很多地方有观察者的身影的,最简单的就是一个点击事件,是不是也有其意思,发布者是一个按钮,而接收者可以是表单,弹层等任何东西。
观察者模式存在的意义
首先我们说说他的优点: