HarmonyOS 鸿蒙Next 使用Navigation做页面跳转时A页面自定义组件生命周期方法

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

HarmonyOS 鸿蒙Next 使用Navigation做页面跳转时A页面自定义组件生命周期方法

1、使用Navigation的方式跳转页面,A到B页面的时候 A页面的onxxxHiden方法和disappear方法都没有执行
 

3 回复
Navigation作为路由容器,其生命周期承载在NavDestination组件上,以组件事件的形式开放。

其生命周期大致可分为三类,自定义组件生命周期、通用组件生命周期和自有生命周期。其中,aboutToAppear和aboutToDisappear是自定义组件的生命周期(NavDestination外层包含的自定义组件),OnAppear和OnDisappear是组件的通用生命周期。剩下的六个生命周期(onWillAppear 、onWillShow 、onShown、onWillHide、onHidden、onWillDisappear)为NavDestination独有。

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/arkts-navigation-navigation-V13#%E9%A1%B5%E9%9D%A2%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F

更多关于HarmonyOS 鸿蒙Next 使用Navigation做页面跳转时A页面自定义组件生命周期方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


深色代码主题
复制
import { hilog } from '@kit.PerformanceAnalysisKit';

@Entry @ComponentV2 struct Index { private pathStack = new NavPathStack()

build() { Navigation(this.pathStack) { Column() { Button(‘go child’) .onClick(() => { this.pathStack.pushPathByName(‘child’, null) }) }.onVisibleAreaChange([1], (isShow) => { hilog.debug(0x000000, ‘rainrain’, 'index isShow == ’ + isShow) }) }.size({ width: ‘100%’, height: ‘100%’ }) .hideTitleBar(false) .hideToolBar(false) .navDestination(this.BuilderMap) }

@Builder BuilderMap(name: string) { if (name == ‘child’) { ChildPage() } else { ThirdPage() } } }

@ComponentV2 struct ChildPage { build() { NavDestination() { Column() { Button('pop ').onClick(() => { this.queryNavigationInfo()?.pathStack.pop() }) Button(‘next’).onClick(() => { this.queryNavigationInfo()?.pathStack.pushPathByName(‘third’, null) }) } }.size({ width: ‘100%’, height: ‘100%’ }) .onShown(() => { hilog.debug(0x000000, ‘rainrain’, ‘child show’) }).onHidden(() => { hilog.debug(0x000000, ‘rainrain’, ‘child onHidden’) }) } }

@ComponentV2 struct ThirdPage { build() { NavDestination() { Column() { Button('pop ').onClick(() => { this.queryNavigationInfo()?.pathStack.pop() })

  }
}.<span class="hljs-title function_">size</span>({ <span class="hljs-attr">width</span>: <span class="hljs-string">'100%'</span>, <span class="hljs-attr">height</span>: <span class="hljs-string">'100%'</span> })
.<span class="hljs-title function_">onShown</span>(<span class="hljs-function">() =&gt;</span> {
  hilog.<span class="hljs-title function_">debug</span>(<span class="hljs-number">0x000000</span>, <span class="hljs-string">'rainrain'</span>, <span class="hljs-string">'Third show'</span>)
}).<span class="hljs-title function_">onHidden</span>(<span class="hljs-function">() =&gt;</span> {
  hilog.<span class="hljs-title function_">debug</span>(<span class="hljs-number">0x000000</span>, <span class="hljs-string">'rainrain'</span>, <span class="hljs-string">'Third onHidden'</span>)
})

} }

在HarmonyOS鸿蒙Next系统中,使用Navigation进行页面跳转时,A页面的自定义组件生命周期方法会按照组件的生命周期规范执行。具体表现如下:

  1. onCreate:当组件被创建时调用,这是组件生命周期的开始。

  2. onAttached:当组件被附加到窗口时调用,此时组件已经与界面关联。

  3. onStart:当组件变为可见状态时调用,此时用户可以看到组件的UI。

  4. onActive:当组件处于前台活动状态时调用,此时组件可以接收用户输入等交互。

  5. onInactive:当组件失去前台活动状态但仍然可见时调用。

  6. onEnd:当组件变为不可见状态时调用,此时用户已经看不到组件的UI。

  7. onDetached:当组件从窗口分离时调用,此时组件与界面的关联被解除。

  8. onDestroy:当组件被销毁时调用,这是组件生命周期的结束。

在A页面进行页面跳转时,如果A页面中的自定义组件被移除或隐藏,相应的生命周期方法(如onEnd、onDetached)将会被触发。如果跳转后A页面重新显示,相应的生命周期方法(如onStart、onActive)也会被再次调用。

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

回到顶部