HarmonyOS 鸿蒙Next EventHub如何用?感觉怎么用都不对。
HarmonyOS 鸿蒙Next EventHub如何用?感觉怎么用都不对。
<markdown _ngcontent-axe-c237="" class="markdownPreContainer">
@Preview
@Component
export default struct MainPage {
@State a: string = “10”
aboutToAppear() {
// 注册广播事件,用的方法直接是调用onEventChanged
getContext(this).eventHub.on(“event”, this.onEventChanged)
}
aboutToDisappear() {
// 注销广播事件
getContext(this).eventHub.off(“event”, this.onEventChanged)
}
onEventChanged() {
// ERROR 此处调用时,this非当前类,会崩溃。但如果改成使用匿名函数来注册,那如何注销?
this.a = “20”
this.executeFunction()
}
executeFunction() {
// do something
}
build() {
Button(“发送”).onClick(()=> {
getContext(this).eventHub.emit(“event”)
})
}
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
</markdown>关于HarmonyOS 鸿蒙Next EventHub如何用?感觉怎么用都不对。的问题,您也可以访问:https://www.itying.com/category-93-b0.html 联系官网客服。
改成:getContext(this).eventHub.on("event", this.onEventChanged.bind(this))
这个真可以
希望HarmonyOS能继续推出更多实用的功能,满足用户的不同需求。
在 UIAbility 可以直接绑函数,感觉UIAbility 中对象血缘关系清晰,妈就是亲生的。
let eventHub = this.context.eventHub;
eventHub.on('LoadService',this.LoadService);
eventHub.on('FirstAppear',this.FirstAppear);
在 Page中要换种方式,绑函数还要告诉它谁去调,感觉页面中对象都是流浪弃儿,都不知妈是谁。
let eventHub = getContext(this).eventHub;
eventHub.on('scrollIndex',this.onEventScrollIndex.bind(this));
eventHub.on('scrollEnd',this.onEventScrollEnd.bind(this));
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17
现在是将响应方法写成一个变量。来解决这个问题。
[@Preview](/user/Preview)
[@Component](/user/Component)
export default struct MainPage {
[@State](/user/State) a: string = "10"
abcdefg = () => {
this.onEventChanged()
}
aboutToAppear() {
// 注册广播事件,用的方法直接是调用onEventChanged
getContext(this).eventHub.on(“event”, this.abcdefg)
}
aboutToDisappear() {
// 注销广播事件
getContext(this).eventHub.off(“event”, this.abcdefg)
}
onEventChanged() {
this.a = “20”
this.executeFunction()
}
executeFunction() {
// do something
}
build() {
Button(“发送”).onClick(()=> {
getContext(this).eventHub.emit(“event”)
})
}
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
这是this的用法问题
把下边的代码修改一下
修改前
getContext(this).eventHub.on("event", this.onEventChanged)
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
修改后
getContext(this).eventHub.on("event", ()=> {
this.onEventChanged()
})
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
如果这样写的话,那就没法注销广播了。
也使用相同的方法 getContext(this).eventHub.off(“event”, ()=> { this.onEventChanged() })进行注销广播好像就可以,这会出现什么问题吗?
这样子注销跟注册的是同一个匿名方法?怕是注销不掉吧。