介绍
小编这次要给大家分享的是Vue如何实现发布订阅模式,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。
Vue项目中不同组件间通信一般使用vuex,通常情况下vuex和EventBus不应该混用,不过某些场景下不同组件间只有消息的交互,这时使用EventBus消息通知的方式就更合适一些。
图解
html
& lt; body> & lt;脚本src=啊?Dvue.js"祝辞& lt;/script> & lt; script> const应用=new DVue ({ 数据:{ 测试:“我test",, foo: { 栏:“bar" } } }) 应用。美元数据。测试=癶ello world !“//应用程序。data.foo美元。酒吧=澳愫?“ & lt;/script> & lt;/body>
Dvue。js
类DVue { 构造函数(选项){ 这一点。美元选项=选项//数据响应化 这一点。$ data=https://www.yisu.com/zixun/options.data this.observe(元数据)。//模拟一下观察家创建//激活得到并将依赖添加到deps数组上 新观察家() data.test美元这个。 新观察家() data.foo.bar美元这个。 } 观察(值){//判断价值是否是对象 如果(!值| | typeof价值!=='对象'){ 返回 }//遍历该对象 种(价值)。forEach(关键=> { this.defineReactive(价值、关键值(例子)) }) }//数据响应化 defineReactive (obj,钥匙,val) {//判断val内是否还可以继续调用(是否还有对象) this.observe (val)//递归解决数据嵌套//初始化管理 const dep=new dep () Object.defineProperty (obj,钥匙,{ get () {//读取的时候判断Dep.target是否有,如果有则调用addDep方法将Dep.target添加到deps数组上 Dep.target & & dep.addDep (Dep.target) 返回瓦尔 }, 集(newVal) { 如果(newVal===val) { 返回; } val=newVal//console.log(“${关键}属性更新了:$ {val} ') dep.notify()//更新时候调用该方法 } }) } }//Dep:用来管理观察者 类Dep { 构造函数(){//这里存放若干依赖(观察者)|一个观察者对应一个属性 this.deps=[]; }//添加依赖 addDep (dep) { this.deps.push (dep) }//通知方法 notify () { this.deps.forEach dep=> dep.update ()) } }//观察者 类观察家{ 构造函数(){//将当前观察家实例指定到Dep静态属性目标上 Dep.target=这//当前这就是观察者对象 } update () { console.log(属性更新了”) } }
看完这篇关于Vue如何实现发布订阅模式的文章,如果觉得文章内容写得不错的话,可以把它分享出去给更多人看到。