Vue如何实现发布订阅模式

  介绍

小编这次要给大家分享的是Vue如何实现发布订阅模式,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。

Vue项目中不同组件间通信一般使用vuex,通常情况下vuex和EventBus不应该混用,不过某些场景下不同组件间只有消息的交互,这时使用EventBus消息通知的方式就更合适一些。

图解

 Vue如何实现发布订阅模式

 Vue如何实现发布订阅模式

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如何实现发布订阅模式的文章,如果觉得文章内容写得不错的话,可以把它分享出去给更多人看到。

Vue如何实现发布订阅模式