HarmonyOS 鸿蒙Next APP首页tab页中页面无法触发onPageShow事件
HarmonyOS 鸿蒙Next APP首页tab页中页面无法触发onPageShow事件
【关键字】
API10 / urlDecode / urlEncode
【问题描述】
APP主页是一个tab,其中一个tab的内容是自定义的页面A。但是tab中加载的页面A无法触发onPageShow事件(已经排除了@entry等问题,页面A在非tab内加载时是可以触发onPageshow的)。
现在有下面这样一个流程:
tab -> 其中一个内容页A -> A页面跳转到B页面 -> B页面参数回传给A
但现在A页面的onPageShow事件无法触发,不能在onPageShow中通过router.getParams获取B页面回传的参数。请问是否有解决该场景的方法或建议?
【解决方案】
当前onPageShow事件是不生效的,onPageShow是页面级的生命周期。
- 方案一:tabs切换触发的应该是子组件组件级的生命周期aboutToAppear,如果只需要一次传数据可以使用aboutToAppear
- 方案二:可以使用应用级变量状态管理AppStorage来同步数据
参考文档如下:
https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-state-management-0000001815767916#ZH-CN_TOPIC_0000001815767916__appstorage
更多关于HarmonyOS 鸿蒙Next APP首页tab页中页面无法触发onPageShow事件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
从学习到开发,有一个半月的时间了,感觉设计缺陷很多,系统bug很多,就好比这个问题,我们每次切后台回到页面都要刷新数据。现在搞的很复杂。
更多关于HarmonyOS 鸿蒙Next APP首页tab页中页面无法触发onPageShow事件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
有问题可拿来讨论讨论,人多力量大:)
使用开源的《开眼》项目中的eventbus,见附件。
或SDK: API10 (4.0.10.9) 使用第三库LiveEventBus
[@ohos/liveeventbus/v/2.1.0](https://ohpm.openharmony.cn/#/cn/detail/)
需要澄清一下问题中描述的对象:
1、A是主页面Tabs一个页签的内容页(TabContent下子组件),B是另一个页面,从B返回数据给A,也就是返回给主页面;
2、A是单独定义的一个组件,分开文件保存(可加@Entry),或同一文件保存(不能加@Entry);
重点:A只要是其它组件的子组件,就失去@Entry装饰的作用,自然不会有页面回调onPageShow()。
主页面是有onPageShow()可接收返回数据,可以考虑从主页面变量传递给组件A,毕竟主页面与A之间有父子或爷孙关系,用@State > @Link/@Prop 或 @Provide > @Consume 应该可实现A接收B返回数据。
总的来说,HarmonyOS是一款非常优秀的操作系统,期待它能在未来带给我们更多惊喜!
主页面onPageShow只会再进入后台再进入前台的时候触发,如果是跳转了页面再回来主页面,不会触发,已验证踩坑。
我想问一下,当页面打开时,所有tab页面中的内容如何在后台全部获取数据接口并完成自己的渲染呢?这样的目的是想当用户切换tab时不再重复刷新了,
数据可在页面加载时在aboutToAppear()中加载,多数接口是异步方法,因此UI影响应当不大;但渲染只有显示的组件才会进行,其它tab有数据,要切换后才会渲染。具体看你要解决才能问题。
我呀遇到这个问题,我需要页面跳转回来多次传递数据所以aboutToAppear没用,暂时没找到解决方案,希望以后能解决这个问题。
.onVisibleAreaChange([0.0, 1.0], (isVisible: boolean, currentRatio: number) => { if (isVisible && currentRatio == 1.0) { LogUtil.e(“View可见”) } else { LogUtil.e(“View不可见”) } })
方便具体说说需求么?
- 主Tab里面接收参数,然后通过provide Consume watch等更新数据
- 通过eventHub订阅事件更新数据,
针对HarmonyOS鸿蒙Next APP首页tab页中页面无法触发onPageShow
事件的问题,可能的原因及解决方案如下:
-
事件监听未正确注册: 确保在每个tab页面对应的页面中已经正确注册了
onPageShow
事件的监听。检查代码中是否有遗漏或错误地注册事件监听器的部分。 -
页面生命周期管理问题: 鸿蒙系统中,页面的生命周期管理可能影响到事件的触发。确认页面在切换时是否正确进入了预期的生命周期状态,以及
onPageShow
事件是否在正确的生命周期阶段被触发。 -
Tab切换逻辑错误: 检查tab切换的逻辑,确保在切换tab时,系统能够正确地识别并触发
onPageShow
事件。可能存在逻辑错误导致事件未被正确触发。 -
系统或框架bug: 如果以上均检查无误,考虑是否是鸿蒙系统或框架本身的bug。可以尝试查阅鸿蒙系统的官方文档或社区,看是否有其他开发者遇到并解决了类似问题。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html