HarmonyOS 鸿蒙Next EventHub如何用?感觉怎么用都不对。
HarmonyOS 鸿蒙Next EventHub如何用?感觉怎么用都不对。
<markdown _ngcontent-axe-c237="" class="markdownPreContainer">
</markdown>@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>
关于HarmonyOS 鸿蒙Next EventHub如何用?感觉怎么用都不对。的问题,您也可以访问:https://www.itying.com/category-93-b0.html 联系官网客服。
更多关于HarmonyOS 鸿蒙Next EventHub如何用?感觉怎么用都不对。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
改成:getContext(this).eventHub.on("event", this.onEventChanged.bind(this))
更多关于HarmonyOS 鸿蒙Next EventHub如何用?感觉怎么用都不对。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这个真可以
希望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() })进行注销广播好像就可以,这会出现什么问题吗?
这样子注销跟注册的是同一个匿名方法?怕是注销不掉吧。