HarmonyOS 鸿蒙Next APP首页tab页中页面无法触发onPageShow事件

发布于 1周前 作者 eggper 来自 鸿蒙OS

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是页面级的生命周期。


更多关于HarmonyOS 鸿蒙Next APP首页tab页中页面无法触发onPageShow事件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

16 回复

从学习到开发,有一个半月的时间了,感觉设计缺陷很多,系统bug很多,就好比这个问题,我们每次切后台回到页面都要刷新数据。现在搞的很复杂。

更多关于HarmonyOS 鸿蒙Next APP首页tab页中页面无法触发onPageShow事件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


有些不算是缺陷,主要是习惯一种开发环境后很多东西是习惯思维,以为之前的API功能是应该的,那是因为之前花了时间去把环境中已有的各种功能组合出来最终想要的结果;在新环境中需要重新了解环境具有的功能,需要重新思考如何组合,经验不能直接用了,自然觉得麻烦、不合理、甚至觉得是bug(当然有bug也是实事);

有时候会出现用旧环境的思路强行套用新环境的功能来实现,结果可能会很麻烦;多了解清晰新环境有哪些功能和手段,才能组合出最佳的效果;有些技巧是需要时间打磨的。

个人观点,可喷。。。

有问题可拿来讨论讨论,人多力量大:)

IOS和android都有成熟的机制,现在要绕过成熟的机制,要利用其它本不是处理这种场景的手段去实现效果,这本身就是一种设计缺陷,没啥好洗的。

使用开源的《开眼》项目中的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不可见”) } })

方便具体说说需求么?

  1. 主Tab里面接收参数,然后通过provide Consume watch等更新数据
  2. 通过eventHub订阅事件更新数据,

针对HarmonyOS鸿蒙Next APP首页tab页中页面无法触发onPageShow事件的问题,可能的原因及解决方案如下:

  1. 事件监听未正确注册: 确保在每个tab页面对应的页面中已经正确注册了onPageShow事件的监听。检查代码中是否有遗漏或错误地注册事件监听器的部分。

  2. 页面生命周期管理问题: 鸿蒙系统中,页面的生命周期管理可能影响到事件的触发。确认页面在切换时是否正确进入了预期的生命周期状态,以及onPageShow事件是否在正确的生命周期阶段被触发。

  3. Tab切换逻辑错误: 检查tab切换的逻辑,确保在切换tab时,系统能够正确地识别并触发onPageShow事件。可能存在逻辑错误导致事件未被正确触发。

  4. 系统或框架bug: 如果以上均检查无误,考虑是否是鸿蒙系统或框架本身的bug。可以尝试查阅鸿蒙系统的官方文档或社区,看是否有其他开发者遇到并解决了类似问题。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部