美文网首页vue
关于vue中发布-订阅模式的原理浅析

关于vue中发布-订阅模式的原理浅析

作者: 叫维特的少年 | 来源:发表于2020-11-10 15:52 被阅读0次

作为一个vue开发者,在学习和使用vue的过程中都会接触到自定义事件,其中两个方法就是$on$emit,接下来通过简单的实现来浅析下其中的实现原理

vue的实现

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Vue 自定义事件</title>
</head>
<body>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>  
    // Vue 实例
    const app = new Vue()
    // 订阅事件
    app.$on("click", () => {
      console.log("click1")
    })
    app.$on("click", () => {
      console.log("click2")
    })
    // 发布事件
    app.$emit("click")
  </script>
</body>
</html>

vue官网地址
接下来进行简单的分析,在vue的自定义事件中$on可以绑定多个不同或相同名称的事件,所以就要把$on注册的事件放到对象中去,并且该事件的处理函数是在一个数组中保存,当$emit触发某个事件时,会执行这个事件中的多个事件处理函数
如下

//订阅多个事件
$on("change",fn1)
$on("change",fn2)
$on("click",fn3)
$on("click",fn4)
//其形式如下
{
"click":[fn3,fn4],
"change":[fn1,fn2]
}
//当$emit发布事件时会传入事件名称,然后该事件下的所有事件处理函数会被执行
$emit('click');//会执行fn3(),fn4()

发布定于模式的简单实现

class eventEmiter {
  constructor(){
    //this.subs = {}
    //这样写可以提高性能,没有继承任何原型方法,原型链上没有上一层
    this.subs = Object.create(null)
  }
  $on(eventType,handler) {
    this.subs[eventType] = this.subs[eventType] || [];
    this.subs[eventType].push(handler)
  }
  $emit(eventType) {
    this.subs[eventType].forEach(handler => {
      handler();
    })
  }
}
//进行测试
const em = new eventEmiter()
$on('add',()=>{
  console.log('add1');
})
$on('add',()=>{
  console.log('add2')
})
$emit('add')

结果如下


发布-订阅.png

最后,比较下Object.create(null)Object.create({})的差别


因为自己也是在慢慢学习vue中的原理性的东西,如有错误,也希望能够给我指出,也好及时纠正

年华如果虚度,生命将毫无意义

相关文章

  • Vue响应式原理

    Vue2.x 核心响应式原理 Vue3.0 核心响应式原理 Vue 自定义事件 Vue 发布订阅模式 发布/订阅模...

  • 关于vue中发布-订阅模式的原理浅析

    作为一个vue开发者,在学习和使用vue的过程中都会接触到自定义事件,其中两个方法就是$on和$emit,接下来通...

  • vue2

    Vue的双向绑定原理(扩展) Object.defineProperty 观察者模式(发布-订阅模式) 计算属性 ...

  • 模拟 Vue 自定义事件(订阅发布模式)

    Vue 中使用 $on、$emit 一般用来使用兄弟组件中的参数传递,其原理就是使用了订阅发布模式 Vue 的例子...

  • 发布订阅模式

    发布订阅模式 socket.io,发布订阅的实现 node 的 Eventemitter模块 Vue 中的 Eve...

  • vue面试知识点

    vue 数据双向绑定原理 vue实现数据双向绑定原理主要是:采用数据劫持结合发布订阅设计模式的方式,通过对data...

  • Vue MVVM 原理实现

    核心原理 MVVM 双向数据绑定, 数据驱动视图 Vue 实现 MVVM 采用 数据劫持 + 发布订阅模式 : ...

  • Vue 学习笔记-双向绑定原理及实现

    原理: vue.js 采用 数据劫持 结合 发布者-订阅者模式 的方法,通过 Object.defineProp...

  • Vue 速记

    响应原理 vue 采用水街吃结合 ‘发布者-订阅者模式’ 的方式,通过 Object.defineProperty...

  • 手写 Vue Router、手写响应式实现、虚拟 DOM 和 D

    模拟 Vue.js 响应式原理 一、数据驱动 准备工作 数据驱动 响应式的核心原理 发布订阅模式和观察者模式 数据...

网友评论

    本文标题:关于vue中发布-订阅模式的原理浅析

    本文链接:https://www.haomeiwen.com/subject/yikjbktx.html