HarmonyOS 鸿蒙Next Navigation 页面出栈时,onShown 不执行
HarmonyOS 鸿蒙Next Navigation 页面出栈时,onShown 不执行 我使用 Navigation 和 NavDestination 路由,页面跳转一切都OK,但是我页面出栈时,无法监听页面的展示。
从HomePage 跳转到其他页面, 然后 NavPathStack.pop() 回到 HomePage。onShown() 未执行。 这种情况 我该怎么监听 HomePage 每次的展示?
// MainPage
@Entry({routeName: 'MainPage'})
@Component
struct MainPage {
build() {
Navigation(this.entryHapRouter) {
Row() {
Stack({ alignContent: Alignment.Bottom }) {
Tabs({ barPosition: BarPosition.End, controller: this.controller }) {
TabContent() {
HomePage({pageInfos: this.entryHapRouter, avator: this.avator}).width(MainPageConstants.FULL_PERCET).height(MainPageConstants.FULL_PERCET)
}
}.scrollable(false)
.onChange((index) => {
this.currentIndex = index;
})
}.width(MainPageConstants.FULL_PERCET)
}.height(MainPageConstants.FULL_PERCET).padding({ bottom: 10 })
}.hideTitleBar(true)
}
// HomePage
@Component
export struct HomePage {
build() {
NavDestination() {
SideBarContainer(SideBarContainerType.Overlay) { //侧边栏
SideBarContainerMe({ isLogin: this.isLogin, showSlide: this.showSlide , avator: this.avator})
Stack() {
/****************/
}.align(Alignment.TopStart)
.width(HomePageConstants.FULL_WIDTH)
.height(HomePageConstants.FULL_HEIGHT)
}
.showSideBar(this.showSlide)
}.hideTitleBar(true)
.onShown(() => {
//未执行
})
}
}
更多关于HarmonyOS 鸿蒙Next Navigation 页面出栈时,onShown 不执行的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
可以通过uiObserver.on('navDestinationUpdate', func)
来进行监听
文档地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-navigation-navigation-V5#页面监听和查询
通过eventHub
传递事件
文档地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-js-apis-inner-application-eventhub-0000001774280590
示例代码
// Index.ets
eventFunc() {
console.log('eventFunc is called');
}
aboutToAppear() {
if (!this.entryHapRouter) {
this.entryHapRouter = new NavPathStack();
}
console.log("====Index=aboutToAppear=")
let context = getContext() as common.UIAbilityContext;
context.eventHub.on('myEvent', this.eventFunc);
RouterModule.createRouter(RouterNameConstants.ENTRY_HAP, this.entryHapRouter);
};
// EntryAbility.ets
windowStage.getMainWindow((err: BusinessError, data) => {
let windowClass = data;
let uiContext: UIContext = windowClass.getUIContext();
let uiObserver: UIObserver = uiContext.getUIObserver();
uiObserver.on("navDestinationUpdate", (info) => {
// NavDestinationState.ON_SHOWN = 0, NavDestinationState.ON_HIDE = 1
if (info.state == 0) {
// NavDestination组件显示时操作
console.info('page ON_SHOWN:' + info.name.toString());
console.info('page ON_SHOW:' + info.navDestinationId.toString());
} else if (info.state == 1){
console.info('page ON_HIDDEN:' + info.name.toString());
console.info('page ON_HIDDEN:' + info.navDestinationId.toString());
this.context.eventHub.emit('myEvent');
}
})
})
更多关于HarmonyOS 鸿蒙Next Navigation 页面出栈时,onShown 不执行的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS(鸿蒙)系统中,当Next Navigation页面出栈时,如果onShown
方法没有执行,这通常与页面生命周期管理或事件触发机制有关。onShown
方法通常在页面成功显示给用户时被调用,但如果页面在显示过程中被销毁或替换,该方法可能不会触发。
可能的原因包括:
-
页面生命周期异常:页面可能在完全显示之前就已经进入了销毁阶段,导致
onShown
无法执行。检查页面的生命周期管理代码,确保页面在显示过程中没有被异常销毁。 -
事件传递问题:如果页面之间的导航事件没有正确传递或处理,可能会影响
onShown
的触发。确保导航事件被正确处理,并且页面状态更新逻辑正确无误。 -
系统或框架bug:在某些情况下,系统或框架本身的bug也可能导致
onShown
不执行。检查鸿蒙系统的更新日志和已知问题列表,看是否有相关的修复或说明。
解决这类问题通常需要深入调试和检查代码逻辑。确保所有相关的页面生命周期方法和事件处理逻辑都按预期工作。如果问题依旧没法解决请联系官网客服,官网地址是: