鸿蒙开发EventBus

embedded/2024/9/20 6:02:21/ 标签: harmonyos, 华为, 鸿蒙开发, 鸿蒙教程, 鸿蒙, emitter
鸿蒙开发>鸿蒙开发EventBus

鸿蒙没有EventBus这个库,有emitter这个通知库。

emitterEventBus_2">一、吐槽:虽然emitter能做EventBus功能,但是它存在的坑,真的用了才知道,能不用它就不用吧

坑的点:

  1. 一个注销,其他地方用到了这个id都会被注销掉
  2. 如果不注销,多次进这个page,会重复注册,这个通知里面执行的东西就会多次执行
  3. 基于第2点,如果你打开多个同个page,它等同于多次注册,那你每个page的通知就会执行多次。这是灾难级的
  4. 如果不注销,就算你的page关闭,它还是会执行的
它的用法我就不说了,自己去官网看看

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-emitter-V5#emitteron

二、 针对它的坑的解决方案

其实最好的是它和EventBus一样,和page绑定最好的。page之间不要互相影响
解决方案:
同一事件定一组集合出来,相同事件,通知集合中的所有注册了的事件

部分代码:

定义一个事件

static HomeFilterEvents:emitter.InnerEvent[] = []
static readonly HOME_FILTER_EVENT : emitter.InnerEvent = {eventId:10001}

往集合里面添加

static registerEvent(events:emitter.InnerEvent[],typeEventId:number,eventId:number,callback?: (event:emitter.EventData)=>void){let isExist = falseif (events && events.length > 0) {for (let i = events.length-1;i>= 0;i--){if (events[i].eventId - typeEventId === eventId) {// 先注销一次,再注册emitter.off(typeEventId+eventId)emitter.on({eventId: typeEventId+eventId}, (event) => { callback?.(event) })isExist = truebreak}}}if (!isExist){events.push({eventId: typeEventId+eventId})emitter.on({eventId: typeEventId+eventId}, (event) => { callback?.(event) })}}

发送事件

  /*** @desc : 发送通知,同一类型也就同一个通知,全部发送* @author : congge on 2024-09-11 10:49**/static postEvent(events:emitter.InnerEvent[],data?: emitter.EventData){if (events && events.length > 0){events.forEach((value)=>{emitter.emit(value,data)})}}

需要完整处理代码的可私信我


http://www.ppmy.cn/embedded/110481.html

相关文章

async/await 的理解

概念 用来实现同步的效果,其实就是语法糖,是为优化 then 链而开发出来的。 从字面上来看,async 是“异步”的简写,await 则为等待,所以很好理解 async 用于申明一个 function 是异步的,而 await 用于等待…

Redis 主从复制的原理详解

引言 Redis 作为一种高性能的内存数据库,广泛应用于高并发、低延迟的场景中。然而,单机版的 Redis 存在一定的局限性,尤其是在高可用性和负载均衡方面。为了应对这些挑战,Redis 提供了主从复制(Replication&#xff0…

Apache SeaTunnel Committer专访刘乃杰 | 用开源推动数据同步工具的创新

作者:刘乃杰 编辑整理:曾辉 今天,我们有幸采访到了Apache SeaTunnel社区的新提名Committer刘乃杰,作为社区的活跃贡献者,一直为项目的发展和创新方面做着许多重要的贡献。 让我们一起走进他的开源故事,了…

浅谈模型在信贷营销中的应用

浅谈模型在信贷营销中的应用 当前在信贷营销场景中,用户流量竞争愈加激烈,获客成本持续攀高,客户消费观念和消费信心趋向保守,传统的信贷营销方式效果逐渐乏力,借助数据挖掘技术对用户进行多元优化及精细化管理已经成为企业在经营发展中的普遍趋势。在此背景下,本文将围…

Redis_RDB持久化

基于RDB的持久化方式会把当前内存中所有的redis键值对数据以快照的方式写入硬盘文件中,如果需要恢复数据,就把快照文件读到内存中。 RDB快照文件是经压缩的二进制格式的文件,它的储存路径不仅可以在redis服务器启动前通过配置参数来设置&…

类和对象(中)

片头 大家好!在上一篇中,我们初步了解了类和对象,今天我们继续深入学习类和对象,准备好了吗?咱们开始咯! 一、类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么…

css grid布局属性详解

Grid布局 前言一、认识Grid1.1容器和项目1.2行和列1.3单元格和网格线 二、容器属性2.1.grid-template-columns与grid-template-rows属性2.1.1 直接使用长度单位比如px2.1.2 使用百分比 %2.1.3 使用repeat函数2.1.4 按比例划分 fr 关键字2.1.5 自动填充 auto 关键字2.1.6 最大值…

JAVAWeb---JavaScript

第三章 JavaScript 一 JS简介 1.1 JS起源 Javascript是一种由Netscape(网景)的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,遗留的速度问题,为客户提供更流畅的浏览效…

Java数据结构(十)——冒泡排序、快速排序

文章目录 冒泡排序算法介绍代码实现优化策略复杂度和稳定性 快速排序算法介绍优化策略非递归实现代码演示复杂度和稳定性 冒泡排序 算法介绍 冒泡排序是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就交换。遍历…

利用AI驱动智能BI数据可视化-深度评测Amazon Quicksight(三)

简介 随着生成式人工智能的兴起,传统的 BI 报表功能已经无法满足用户对于自动化和智能化的需求,今天我们将介绍亚马逊云科技平台上的AI驱动数据可视化神器 – Quicksight,利用生成式AI的能力来加速业务决策,从而提高业务生产力。…

Nginx跨域运行案例:云台控制http请求,通过 http server 代理转发功能,实现跨域运行。(基于大华摄像头WEB无插件开发包)

文章目录 引言I 跨域运行案例开发资源测试/生产环境,Nginx代理转发,实现跨域运行本机开发运行II nginx的location指令Nginx配置中, 获取自定义请求header头Nginx 配置中,获取URL参数引言 背景:全景监控 需求:感知站点由于云台相关操作为 http 请求,http 请求受浏览器…

【深度学习】搞懂卷积神经网络(一)

卷积神经网络是一种具有局部连接,权重共享等特性的深层前馈神经网络。一般是由卷积层,池化层,全连接层交叉堆叠而成,使用反向传播算法进行训练。卷积神经网络具有一定程度上的平移,缩放和旋转不变性,较前馈…

Ubuntu 24.04中安装virtualenv

在Ubuntu 24.04中安装virtualenv,可以按照以下步骤进行: 1. 确保Python已安装‌: 在终端中输入python --version或python3 --version来检查Python的安装情况。 python3 --version2. 安装pip‌(如果尚未安装)&#x…

分布式锁-Redisson 可重入锁

在分布式系统中,分布式锁是一种常用的机制,用来在多个实例或服务之间控制共享资源的访问,确保不会出现并发冲突或资源竞争。Redis 是常用的分布式锁实现工具,而 Redisson 是 Redis 的一个 Java 客户端,它提供了强大且易…

【白话Redis】缓存雪崩、穿透、击穿、失效和热点缓存重建

快速导航 Redis不可不知的故障现象一、缓存雪崩定义:解决方案: 二、缓存穿透定义:解决方案一:解决方案二(更普遍的做法): 三、缓存击穿定义:解决方案: 四、缓存失效Redis…

【MySQL】MySQL常用的数据类型——表的操作

前言: 🌟🌟本期讲解关于MySQL常用数据类型,表的简单使用,希望能帮到屏幕前的你。 🌈上期博客在这里:http://t.csdnimg.cn/wwaqe 🌈感兴趣的小伙伴看一看小编主页:GGBondl…

需求分析例题

答案:B 知识点:软件需求按照需求分类分为 业务需求 用户需求 系统需求 业务需求是整体全局角度看的 用户需求是按照用户视角的角度提的 系统需求是从计算机本身角度产生的 系统需求又细分为功能需求,性能需求,设计约束。性需…

前后端时间转换的那些常见问题及处理方法

在现代的Web开发中,前后端分离的架构已经成为主流,尤其是在Spring Boot和Vue.js的组合中。开发者在这种架构下经常遇到的一个问题就是如何处理时间的转换和显示。前端和后端对时间的处理方式不同,可能会导致时间在传递过程中出现问题&#xf…

前端vue项目服务器部署(docker)

前端vue项目服务器部署(docker) 步骤 1: 导入 Nginx Docker 镜像 1、上传 Nginx Docker 镜像 将你的nginx-alpine.tar包上传到服务器上。假设路径为 /var/v3-admin-vite/nginx-alpine.tar。 scp -r "C:\Users\86184\Desktop\v3-admin-vite" root110.40.179.182:/…

华为HCIA、HCIP和HCIE认证考试明细

华为认证体系包括三个主要等级:HCIA(华为认证ICT助理)、HCIP(华为认证ICT高级工程师)和HCIE(华为认证ICT专家)。每个等级的认证都有其特定的考试内容和费用。 HCIA(华为认证ICT助理…