事件通知在日常开发中十分重要,不同页面之间的事件通信都会用到事件通知,作为 Android 开发的小伙伴相信都用过 EventBus,LiveDataEventBus 等事件通信工具。鸿蒙开发中也同样需要一个页面之间通信等工具,本篇文章教你在鸿蒙开发中如何实现一个 HEventBus,建议点赞收藏!
在鸿蒙中使用创建静态对象实现单例,首先定义一个私有的静态成员变量defaultInstance
,提供一个静态方法 getDault ()方法返回单例对象。
private static defaultInstance: HEventBus
static getDefault(): HEventBus {
if (HEventBus.defaultInstance == undefined) {
HEventBus.defaultInstance = new HEventBus();
}
return HEventBus.defaultInstance
}
register(eventName: string, eventId: number | string, method: ESObject) {
let result = this.eventMessages.filter((model) => {
return model.eventName == eventName
})
if (result.length == 0) {
let message = new HEventBusMessage()
message.eventName = eventName
this.eventMessages.push(message)
}
this.eventMessages.forEach((message) => {
if (message.eventName == eventName) {
let model = new HEventBusModel()
model.eventId = eventId
model.method = method
message.models.push(model)
}
})
}
unregister(eventName: string, eventId: number | string) {
this.eventMessages.forEach((message)=>{
if (message.eventName == eventName) {
message.models = message.models.filter((model)=>{
return model.eventId != eventId
})
}
})
}
3.消息发送,通过数组遍历找到事件名称相同的事件发送,参数为 Object。
post(eventName: string,arg: Object){
this.eventMessages.forEach((message)=>{
if (message.eventName == eventName) {
message.models.forEach((model)=>{
model.method(arg)
})
}
})
}
4.清除消息,直接将数组清空即可。
clear(){
this.eventMessages = []
}
事件通知在实际开发中十分重要,使用场景也比较多,根据实际开发场景使用事件通知 HEventBus,由于篇幅限制本文只提供了部分代码,完整代码请联系作者,已经学会了的小伙伴,赶快动手试试吧。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。