`
龙儿筝
  • 浏览: 714 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

鸿蒙Navigation处理启动页跳转到首页问题

阅读更多

在使用Navigation时时,你是否遇到了这样一个问题,Navigation加载启动页为入口,在启动页replace到首页,使首页替换换启动页,结果发现不生效,启动页依然存在。

为什么根页面启动页不能直接替换成首页

我们验证后发现当页面是Navigation的子页面时,是可以使用replace替换,当要替换根页面时,却发现不生产,这是因为我们使用NavPathStack只能操作子页面,根页面不在操作范围内,NavPathStack也不能操作根页面。所以不管是用replace,还是先push,再pop启动页,都是不生效的。

在Navigation中如何将启动页替换成首页

直接替换行不通,这里也有其它几种方式,第一种是Navigation根页面设置成首页,启动页跳到首页使用router的方式来处理。这种方式是可行的,但总觉得不是那么的完美,我都用Navigation了,为什么还要用router呢,官方一再强调不推荐使用router,推荐使用navigation。所以我们还有其它方式吗?

直接用Navigation替换不行,那我们自己手动来替换总行吧,在Navigation根页面加一个标签,首先加载启动页,然后更改标签的值,再去显示首页。我们以V2状态管理为例

@Entry
@ComponentV2
struct Index {
  @Local isShowHome: boolean = false

  build() {
    Navigation() {
      if (this.isShowHome) {
        HomePage()
      } else {
        SplashPage({
          onChangePage: () => {
            this.isShowHome = true
          }
        })
      }
    }
  }
}

@ComponentV2
export struct SplashPage {
  @Event onChangePage: VoidCallback = () => undefined

  aboutToAppear(): void {
    setTimeout(() => {
        this.onChangePage()
      }, 1000)
  }

  build() {
    Stack().width('100%').height('100%')
  }
}

@ComponentV2
export struct HomePage {

  build() {
    Stack().width('100%').height('100%')
  }
}
 

我们在启动页中使用@Event定义一个onChangePage事件,延时1秒后通知Navigation将根页面切换成首页。

这种方式虽然也可以,但总觉得还要手动通过if来切换页面,不是那么的优雅。为什么不能统一用NavPathStack来切换页面呢?不知道Navigation这么设计的原因是什么,不过大家想把启动页和首页也放在Navigation中统一管理,可以使用HMRouter这个三方库来处理,HMRouter是对Navigation做了封装,完成兼容Navigation。这几种方式都不太完美,要是需要单独特殊处理,要么需要引入三方库,大家结合自己的实际情况来选择吧。

分享到:
评论

相关推荐

    基于鸿蒙Navigation系统路由表和Hvigor插件的动态路由方案(源码+说明文档).zip

    一款轻量级的动态路由框架,基于鸿蒙Navigation系统路由表和Hvigor插件实现的方案,可以解决多个业务模块(HAR/HSP)之间解耦和通信问题,从而实现业务复用和功能扩展。 Main Function Points 对Navigation简化使用...

    ZRouter是基于鸿蒙Navigation系统路由表和Hvigor插件实现的动态路由方案,以解决模块间的耦合问题

    ZRouter是基于鸿蒙Navigation系统路由表和Hvigor插件实现的动态路由方案,以解决模块间的耦合问题

    react-navigation 如何判断用户是否登录跳转到登录页的方法

    在 React Navigation 中,可以使用 navigation.push 或 navigation.navigate 方法来跳转到登录页。例如: ```jsx import React from 'react'; import { NavigationActions } from 'react-navigation'; class App ...

    qt-quick QML页面跳转

    例如,可以创建一个`Route`组件来处理页面跳转和参数传递: ```qml Component { id: routeComponent Route { path: "path/to/page" component: Page3.qml } } // 使用 var route = routeComponent....

    Navigation

    一旦后台任务完成,Handler会发送一个消息,告知主线程显示启动页,或者直接跳转到主界面。 这两种方法都可以结合使用,以提供更好的用户体验。例如,APP可以先显示一个简单的静态启动页,同时在后台执行复杂任务。...

    HCIA-HarmonyOS应用开发工程师 V2.0 模拟考试

    在“HCIA-HarmonyOS应用开发工程师 V2.0 模拟考试”中,我们可以学习到关于HarmonyOS应用开发的关键知识点。这个初级认证主要涉及HarmonyOS的基础架构、组件使用、页面跳转、权限管理、应用结构以及开发工具的使用。...

    本人的一个APP程序,实现页面跳转

    本文将详细探讨如何在Android平台上实现页面跳转,因为从标题和描述来看,这是一个关于Android APP程序的页面跳转问题。Android应用通常使用Java或Kotlin编写,我们将基于这两种语言来讲解页面跳转的实现方法。 1. ...

    ReactNative Navigation路由传递数据到下一个页面

    这样,跳转到详情页,可以传递 电影标题 movie.title 和电影对象 movie 在 MovieDetail 页面中 可以拿到这些数据 this.props.navigation.state.params.movie 就可以拿到 电影对象 movie 接下来拿到电影信息,再去...

    WPF学习之页面跳转

    **WPF学习之页面跳转** Windows Presentation Foundation (WPF) 是Microsoft开发的一种用户界面框架,用于构建桌面应用程序。在WPF中,页面跳转是实现应用内部导航的关键功能,对于构建多视图、模块化的应用程序至...

    ZRouter是基于鸿蒙Navigation系统路由表和Hvigor插件实现的动态路由方案,以解决模块间的耦合与通信问题

    ZRouter是基于鸿蒙Navigation系统路由表和Hvigor插件实现的动态路由方案,以解决模块间的耦合与通信问题

    自定义tabbar+navigation

    在iOS应用开发中,TabBar和Navigation是两个非常重要的组件,它们构成了用户界面的基本骨架。TabBar主要用于在底部展示多个主功能模块,而Navigation则通常用于实现页面间的导航和返回功能。本文将深入探讨如何...

    Android中页面跳转

    在Android应用开发中,页面跳转...随着学习深入,你还将了解到更复杂的页面导航策略,如Fragment的使用、Navigation组件的集成以及MVVM架构下页面跳转的最佳实践。不断实践和探索,你将在Android开发的道路上越走越远。

    Silverlight页面跳转及页面间传递参数

    - **NavigationUri**: 要跳转到新的页面,可以使用`NavigationService`对象的`Navigate()`方法,传入目标页面的URI。例如:`navigationService.Navigate(new Uri("/Page2.xaml", UriKind.Relative));` - **事件...

    iOS 实现页面跳转

    我们将讨论两种主要的页面跳转方式:模态(Modal)展示和导航控制器(Navigation Controller)的使用,同时也会涉及控件的生命周期以及UIButton等基础控件的属性。 一、模态页面跳转 模态页面跳转通常用于向用户...

    android项目源码页面跳转

    在Android应用开发中,页面跳转是至关重要的一个环节,它涉及到用户界面的导航和流程控制。本项目源码提供了一个完整的示例,演示了如何在多个页面之间进行有效、流畅的切换。以下是对这个"android项目源码页面跳转...

    Android Material Bottom Navigation使用教程

    // 跳转到发现页 break; case R.id.action_me: // 跳转到个人页 break; } return true; } @Override public void onItemReselected(@NonNull MenuItem item) { // 当已选中的项被再次点击时触发 } }); ...

    谷歌插件,用于网页跳转

    标题 "谷歌插件,用于网页跳转" 涉及的知识点主要集中在浏览器扩展和网页交互上,这在IT行业中是相当重要的一个领域。浏览器插件,尤其是针对谷歌浏览器(Chrome)的插件,能够极大地增强用户的浏览体验,提供定制化...

    ios页面跳转

    在iOS应用开发中,页面跳转是用户交互的重要组成部分,它涉及到用户界面的导航和流程控制。本示例主要探讨了三种iOS页面跳转的方法:通过Storyboard进行导航、使用NavigationController以及视图转换(ViewTransition...

    Struts2简单的页面跳转示例

    此外,Struts2还支持动态结果页面,可以使用OGNL(Object-Graph Navigation Language)表达式来决定跳转到哪个页面。例如: ```xml ${targetPage} ``` 在这里,`targetPage`变量可以在Action类中设置,它的值可以...

    BottomNavigationView和viewpager解决图片不显示只改变颜色的问题

    当这两个组件结合使用时,可能会遇到一个问题:BottomNavigationView的图标只显示纯色背景,而无法正确显示图标的原色和细节。本篇文章将深入探讨这个问题,并提供解决方案。 首先,我们需要理解BottomNavigation...

Global site tag (gtag.js) - Google Analytics