发布订阅模式

vue 发布订阅模式 vue 发布订阅模式 为什么要使用发布订阅模式 vue 中数据反映到视图中的方式主要是采取声明式渲染+模板编译 声明式渲染: 例如v-mdoe等指令的形式渲染 模板编译原理: 简单来讲就是获取app下所有的childNodes 通过循环找到符合的元素节点,node.nodeType === 1 拿到所有元素节点的attributes属性,遍历attributes 其中包括了两个关键属性nodeName、nodeValue 其中nodeName 就是指令:例如v-mode, nodeValue就是v-mo 阅读详情

简写发布订阅模式

var publisher={};//定义发布者
publisher.subscribleList=[];//定义订阅者回调函数列表
//增加订阅者的函数
publisher.on=(fn)=>{
    publisher.subscribleList.push(fn);
}
//发布消息的函数
publisher.emit=function(){
    for(const fn of this.subscribleList)
    {
        fn.apply(this,arguments);
    }
}
//订阅方式
publisher.on((a)=>{
    console.log(a);
})
publisher.emit('订阅消息1')
publisher.emit('订阅消息2')
publisher.emit('订阅消息3')

参考

完整发布订阅

let event={
    subscribleList:{},
    track(key,fn)
    {
        if(!this.subscribleList[key])
        {
            this.subscribleList[key]=[]
        }
        this.subscribleList[key].push(fn);
    },
    trigger(key,args)
    {
        let deps=this.subscribleList[key]
        if(!deps)
            return false;
        deps.forEach(fn=>{
            console.log(args);
            fn.apply(this,[args])
        })
    }
}
// 再定义一个installEvent函数,用于给所有对象动态安装发布-订阅功能
// 如:另一家售楼处也想要这个功能,就可以调用这个注册了,不同再写多一次这段代码
let installEvent = obj => {
    for (let i in event) {
        obj[i] = event[i]
    }
}
let salesOffices = {}
installEvent(salesOffices)
salesOffices.track('squareMeter88', (price) => {
    console.log('小明,你看中的88平方的房子,价格=' + price)
})
// 小光订阅信息
salesOffices.track('squareMeter88', price => {
    console.log('小光,你看中的88平方的房子,价格=' + price)
})
// 小红订阅信息
salesOffices.track('squareMeter100', price => {
    console.log('小红,你看中的100平方的房子,价格=' + price)
})
salesOffices.trigger('squareMeter88', 2000000)
salesOffices.trigger('squareMeter100', 2500000)

vue中的发布订阅

let activeEffect;
//为了在调用depend()的时候把相关函数作为订阅者
//添加到subscribers中去,以后notify的时候就可以用了
class Dep{
    constructor(value)
    {
        this.subscribers=new Set();///所有的订阅者
        this._value=value;
    }
    get value()
    {
        this.depend();
        return this._value
    }
    set value(newVal)
    {
        this._value=newVal;
        this.notify();
    }
    depend()
    {
        if(activeEffect)
        {
            this.subscribers.add(activeEffect)
        }
    }
    notify(){
        //通知订阅者
        this.subscribers.forEach(effect=>{
            effect();
        })
    }
}
function watchEffect(effect)
{
    activeEffect=effect;
    effect();
    activeEffect=null;
}
const dep = new Dep('test');
//如何将一个dep与一个值相关联
//在Dep的构造函数中加一个value属性,通知的时候使用value就好了
watchEffect(()=>{
    console.log(dep.value)
})
dep.value='changed'
设计模式之发布订阅模式 发布——订阅模式简介 发布——订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,多个观察者对象都依赖于一个目标对象,当目标对象的状态发生变化时,所有依赖于这个对象的观察者对象都会收到通知。 发布——订阅模式应用 事实上,我们都使用过发布——订阅模式 document.getElementById('btn').addEventListener('click',function(){ // 执行代码 }) 以上代码就是发布订阅模式,需要监控用户点击button按钮,执行里 阅读详情

相关推荐

摄像机实时接入分析平台视频分析网关AI智能分析智慧营业厅方案

通过智能化的改造,可以提高营业厅的运营效率,降低运营成本,同时提升客户体验和安全保障。

EasyDarwin开源社区技术博客 703

前端必须掌握的设计模式——发布订阅模式

发布订阅模式作为观察者模式的改良版,适合较为复杂的应用场景,前端最经典的应用就是Vue的数据双向绑定,Vue数据双向绑定的代码也会更加符合代码设计的艺术。

划雨悦潭之赋的博客 2325

系统安装、qt配置、安装pcie驱动

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 安装Linux系统指定:ununtu20.04并配置相关软件环境 前言 提示:这里可以添加本文要记录的大概内容: ununtu20.04、Qt 5.9.0、pcie驱动 提示:以下是本篇文章正文内容,下面案例可供参考 一、安装系统 制作系统盘(win10),在开机时按相应键进入BIOS,(华硕需要先改配置启动->CSM->开启->第一个选项选第一个或第二个),等待即可 进入后按照https://www.sysgeek.

weixin_44832804的博客 2205

Java实现发布订阅模式

发布订阅模式是软件开发者很常见的一种设计模式,很多开源库都使用了发布订阅模式,例如RxJava、EventBus、Vue等,所以学习该模式还是很有必要的。 该模式中存在一个或多个发布者,一个或多个订阅者,当发布者发布消息的时候,参与订阅的订阅者会收到对应的消息通知。其实核心原理就是使用一个集合来存储所有的订阅者类,当发布消息的时候遍历这个集合,并调用集合中的每一个订阅者类的通知方法。

renzhongrui的博客 1万+

STM32F401RET6寄存器手册阅读标记

对于时钟树配置,可参考STM32CubeMX中的时钟树配置,STM32CubeMX将基础配置图像化,较为简单。RCC_CR寄存器的HSIRDY位为只读位,当读取值为1时,表示HSI振荡器准备就绪,当HSION位被设置时,HSIRDY会自动设置为低电平。//问题标记:USART配置寄存器信息是如何与USART1/2/3建立联系的(为什么不是三个分别配置)查阅寄存器手册可知,需要配置时钟的模块有:USART1,IO port A。(2)TX配置方法(寄存器手册512页)(4)配置寄存器(寄存器手册548页)

m0_72615170的博客 1468

用人话讲明白线性回归LinearRegression

目录 什么是回归 一元线性回归 损失函数 最小二乘估计 小结 1. 什么是回归 当我们学习一门新课程、接触一个新专业时,总会对该领域的专有名词感到困惑,甚至看完解释仍难以理解其含义。在我们一起学习machine learning的过程中,我会尽量对相关名词用“人话”做一遍解释,以减少学习的“痛苦感”。 譬如今天要学的线性“回归”,这个回归(regression)和我们平时说的“回归祖国”的回...

化简可得 1万+

JavaScript设计模式:四、发布订阅模式

JavaScript设计模式:四、发布订阅模式 文章目录JavaScript设计模式:四、发布订阅模式一、概述1. 观察者模式2. 发布订阅模式3. 观察者模式是不是发布订阅模式 一、概述 观察者模式: 观察者(Observer)直接订阅(Subscribe)主题(Subject),而当主题被激活的时候,会触发(Fire Event)观察者里的事件。 发布订阅模式: 订阅者(Subscriber)把自己想订阅的事件注册(Subscribe)到调度中心(Topic),当发布者(Publisher)发布该事件(

SpringWaterLikeMe 2952

YOLOv12改进策略【损失函数篇】| 替换Powerful-IoU(PIoU),增强对中等质量锚框的关注力,引导锚框更直接、高效地回归

本文针对现有基于IoU的损失函数在目标检测任务中存在的问题,提出了利用Powerful-IoU(PIoU)及其升级版PIoU v2改进YOLOv12的损失函数,以提高模型精度。文章详细介绍了PIoU和PIoU v2的结构原理,并提供了在YOLOv12中实现这些损失函数的具体步骤和代码修改方法。

Limiiiing的博客 931

设计模式 —— 发布订阅模式

发布订阅模式,听起来好像很陌生?Vue 中的 EventBus, $on 以及 $emit 和 $off;Nodejs 中的 EventEmitter,其中 on 和 emit。

LizequaNNN的博客 2011

vue2/3 - 详细实现内网使用离线百度地图功能,百度地图如何离线加载详细教程(内网部署及使用),在vue中无需网络离线使用百度地图相关功能,提供最新完整的瓦片资源下载及相关工具(示例代码,一键复制

vue,vue2,vue3,百度地图,离线使用百度地图,百度地图瓦片官方下载,vue内网使用百度地图离线无网络,断网情况下使用百度地图,vue离线百度地图教程,如何实现内网部署百度地图,无需联网离线使用,vue+ts实现离线百度地图 内网离线百度地图,如何在百度地图Vue项目中下载离线地图,百度离线地图加载不出来,百度地图离线使用不显示怎么办,怎么解决vue内网使用离线百度地图加载失败问题,vue实现离线地图+百度瓦片,vue引入百度离线地图,vue项目如何使用离线百度地图和自定义地图样式,百度离线地图的下

✅ 精选推荐文章 1万+

AutoSAR_BSW高阶 7. Signal Group 信号组

Autosar BSW的高级配置是实现复杂汽车电子系统的关键步骤之一。通过合理配置信号组和使用适当的参数,您可以提高系统性能,确保数据的可靠传输。在本博客中,我们深入探讨了信号组的概念和高级配置参数,并提供了示例代码,希望这些信息能够帮助您更好地理解和应用Autosar BSW的高级配置。如果您在配置过程中遇到任何问题,不妨寻求专业支持,以确保您的汽车电子系统能够顺利运行。Autosar COM 模块是一个广泛应用于汽车行业的关键技术,它使不同的电子控制单元能够有效地通信和协作。

一直在水些技术小文 662

观察者模式和发布订阅模式

观察者(Observer),又称发布-订阅(Publish-Subscrice),属于23中设计模式之一。发布订阅模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主题对象。这个主题对象在自身状态变化时,会通知所有订阅者对象,使它们能够自动更新自己的状态。

三冬暖 3103

火灾图像检测识别:cnn卷积神经网络 Adaboost 支持向量机 随机森林 决策树 完整代码数据

火灾图像检测识别:cnn卷积神经网络 Adaboost 支持向量机 随机森林 决策树 完整代码数据

862

经典设计模式-发布订阅模式

引入 可能有的人在面试当中被问道过,“观察者模式和发布订阅模式的有什么区别?” 其实一开始我以为这两设计模式是一样的,只是叫法有一些区别,后来随着学习的深入,才发现二者还是有区别的。 观察者模式 我认为大多数人都会同意观察者模式是学起来最好入门的,因为我们从字面意思就能知道它主要是做什么的。 这里我列举2个通俗易懂的例子: 1. 那些年,90后的小时候,我们没有手机。悠闲地上午时光,我们...

大灰狼的小绵羊哥哥的博客 7293

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Redis的发布订阅模式详解

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis 的 SUBSCRIBE 命令可以让客户端订阅任意数量的频道, 每当有新信息发送到被订阅的频道时, 信息就会被发送给所有订阅指定频道的客户端。

埃泽漫笔 1306

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

浅谈JS发布订阅模式

在使用前端各大框架时,多多少少会使用过或听说过发布订阅模式,本篇文章将使用原生实现一个简单的发布订阅模式,并演示其在中进行跨组件通信的作用简单来说其实是一种对象间一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都将得到状态改变的通知。把自己想订阅的事件处理函数注册到统一的中,当向调度中心发布数据时,由统一调用注册到的事件处理函数。代码如下: 代码解释:对象即是我们创建的调度中心,里面含有两个函数,一个是订阅函数(),一个是发布函数(),并含有一个存放订阅者事件处理函数的数组()。发布订阅模式

前端之行,任重道远! 8653

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

实现一个简单的发布订阅模式

文章目录一、发布订阅模式是什么?二、发布订阅模式的优缺点三、实现一个通用的发布订阅模式 一、发布订阅模式是什么? 发布订阅模式是对象间的一种一对多的关系,由发布者、订阅者、消息管理器三部分组成,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,所有依赖于它的对象都将得到通知。 不论是在程序世界里还是现实生活中,发布—订阅模式的应用都非常广泛。我们先看一下现实中的例子: 小明最近看上了一套房子,到了售楼处之后才被告知,该楼盘的房子早已售罄。好在售楼MM告诉小明,不久后还有一些尾盘推出。开发商正

weixin_44761091的博客 5148

发布订阅模式代码实现

发布订阅模式简介:订阅者(Subsciber)通过事件注册(Subscribe)将订阅事件提交到调度中心(Topic),调度中心保存好订阅者的注册信息(回调函数),每当发布者(Publisher)发布事件的时候,通过事件发布(Publish)将发布的消息提交到调度中心,然后调度中心统一处理订阅者注册该事件的消息(执行注册时的回调函数)。 show me the code: //创建...

chenjycm的博客 2592

实现发布订阅模式

什么是订阅 在我们的生活中,订阅的现象随处可见,比如我们到书店里要买一本书,但目前并没有到货,我们到柜台前留下信息,店长在到货后变通过我们留下的信息来通知我们货到了,这便是订阅的过程。 发布订阅模式 1.你去买东西断货了, 老板让你留下联系方式, 到货了给你打电话, 这就是发布订阅模式 2.老板就是发布者, 你就是订阅者 3.订阅者将电话添加到了发布者的缓存列表中(电话簿) 4.当发布者到货后就会遍历缓存列表依次通知所有订阅者 实现 // 定义一个类作为发布者 class SyncHook { co

l20001109的博客 640

前端Vue之发布订阅模式

前端vue之发布订阅模式

weixin_44178497的博客 4021

js设计模式之发布订阅者模式

前端工程师进阶学习设计模式,深入学习发布订阅者模式原理

SK_study的博客 2168

装饰者模式、发布订阅模式

// 发布订阅模式、 装饰者模式 //在不改变原来的对象的基础上,添加新的属性或者方法 // ES7 中的装饰者,借助了 object.defineProperty Object.defineProperty(obj, prop, descriptor) // obj:要在其上定义属性的对象。 // prop:要定义或修改的属性的名称。 // descriptor:将被定义或修改的属性描述符。 // 返回值:被传递给函数的对象。 // 装饰器只能用于类和类的方法,不能用于函数,因为存在函.

qq_40774743的博客 211

发布订阅模式理解

发布订阅模式理解 1.发布-订阅模式 发布订阅模式是一种一对多的对象对应关系,多个观察者同时监听某一个对象,当该对象发生改变时,就会执行一个发布事件,这个发布事件会通知所有的事件订阅者,事件订阅者根据得到的数据进而改变自己的状态。 一个完整的发布订阅模式,由发布者、订阅者和消息管理器组成。 2.发布订阅模式的实现思路 1)创建一个发布者对象,并在其上添加一个列表属性,用于存放订阅者的回调函数 2...

weixin_38208314的博客 1436
上一篇: 数据库
下一篇: 跨域资源共享(cors)与预检请求
Simple_IDE
博客等级 码龄8年 61粉丝 218原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值