鸿蒙开发基础-navigation路由跳转是白屏? 原创

hm小林
发布于 2025-9-30 00:12
浏览
0收藏

本文—————小白/零基础/初中高级开发者适用
看了一下,目前网页搜索的关于navigation路由的情况很少且不全,我把所有情况进行一个总结吧,以备各路大佬使用。

为什么会出现白屏?

什么叫白屏?

举个常见的例子,当用户点击A页面中的Button,给Button添加点击事件,进行路由导航navigation去跳转到B页面,
理想情况: 应该是跳到B页面显示B页面中的内容
实际情况: 跳到B页面却不显示B页面内容,只显示白屏。

排查原因:

1.没有引入/配置路由表信息

需要在module.json5文件中进行配置
插入文本:

 "routerMap": "$profile:router_map",

这行代码真的很重要!你不加它就是白屏,多少老手都是写完就忘,找了半天发现代码哪哪都没问题,最后才发现是忘记引入routerMap了,一行代码的事,可以解决99%的问题和节约时间!
使用navigation路由的时候一定要养成良好的习惯——引入routerMap!!!

在项目中的位置图片如下:
鸿蒙开发基础-navigation路由跳转是白屏?-鸿蒙开发者社区
同时需要在resources/base/profile目录下新建router_map.json文件,在router_map.json中配置路由表信息,注意是json文件,不能写注释,会报错!
鸿蒙开发基础-navigation路由跳转是白屏?-鸿蒙开发者社区

2.在路由配置表中信息填写错误

需要:

匹配路由名称name是否一致

匹配pageSourceFile路径是否一致

匹配buildFunction信息是否一致

鸿蒙开发基础-navigation路由跳转是白屏?-鸿蒙开发者社区

3.路由传输时名称有误

通过pushPathByName方法去传递路由,要注意第一个参数也就是name是否和router_map.json中的name属性一致

 Button() {
           Text('登录')
             .fontSize(20)
             .fontWeight(FontWeight.Bold)
         }.onClick(() => {
           this.pageInfos.pushPathByName('LoginOK', '')
         })

4.使用的是Preview预览器调试

navigation是官方推荐的路由导航,不支持预览器查看,建议真机调试或者模拟器调试。
老版本的router路由是支持预览器Preview调试的,但是由于官方不推荐了,所以咱们还是使用navigation吧。

5.NavBar处于隐藏状态

请确定当前NavBar是否处于隐藏状态,如果此时页面栈为空,页面表现上会处于白屏

6.跨模块跳转配置错误

路由表中的页面,比如说我们从Index.ets跳转到LoginOK.ets 页面,那么LoginOK.ets页面中需要配置入口函数Builder,并且需要使用NavDestination组件才能展示页面。

function LoginOKBuilder() {
  NavDestination(){//建议统一在Builder中使用NavDestination组件进行包裹。
    LoginOK()
  }.hideToolBar(true)

}
@Entry
@Component
struct LoginOK {
  build() {
    Row() {
   //此处存放代码
    }
    .height('100%')
  }
}

HAR/HSP模块可以跳转,可以通过module.json5文件查看type类型是否为“har”或者“shared”,如果是feature则会出现错误

"module": {
  "name": "feature_splash",
  "type": "feature",
  // type类型需要为: "har"或者"shared"

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
收藏
回复
举报
回复
    相关推荐