HarmonyOS Navigation使用问题

项目分包,使用动态路由解耦,Navigation使用(参考的应用导航涉及:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/bpta-application-navigation-design-V5#section0427195412313

1、在单独的har包如生活包中,在index.ets中动态引入路由页 import目前只能使用路径, 用静态常量会导致闪退,报错so。

2、在页面栈交互过程中,从A->B 在B页面通过pop携带数据回退到A页面,A页面通过Callback<PopInfo>接收到数据。如果收到数据之后需要对页面做重新渲染,有没有什么方法可以做。

3、@component里的@State这些装饰器在NavDestinationz怎么用。有没有替代的。同样涉及页面重新渲染。

HarmonyOS
2024-10-16 09:57:18
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

demo如下:

//entry 模块 Index  
// Index.ets  
@Entry  
@Component  
struct Index {  
  pageInfos: NavPathStack = new NavPathStack()  
  isUseInterception: boolean = false;  
  onBackPress(): boolean | void {  
  }  
  build() {  
    Navigation(this.pageInfos) {  
      Column() {  
        Button('pushPath PageInEntry', { stateEffect: true, type: ButtonType.Capsule })  
          .width('80%')  
          .height(40)  
          .margin(20)  
          .onClick(() => {  
            this.pageInfos.pushPath({ name: 'PageInEntry' }) //将name指定的NavDestination页面信息入栈  
          })  
        Button('pushPath PageInHsp', { stateEffect: true, type: ButtonType.Capsule })  
          .width('80%')  
          .height(40)  
          .margin(20)  
          .onClick(() => {  
            this.pageInfos.pushPath({ name: 'PageInHsp' }) //将name指定的NavDestination页面信息入栈  
          })  
        Button('pushPath PageInHar', { stateEffect: true, type: ButtonType.Capsule })  
          .width('80%')  
          .height(40)  
          .margin(20)  
          .onClick(() => {  
            this.pageInfos.pushPath({ name: 'PageInHar' }) //将name指定的NavDestination页面信息入栈  
          })  
      }  
    }.title('NavIndex')  
  }  
}
//entry模块 PageInEntry  
// PageTwo.ets  
@Builder  
export function PageInEntryBuilder(name: string, param: Object) {  
  EntryPageBuilder()  
}  
@Entry  
@Component  
export struct EntryPageBuilder {  
  pageInfos: NavPathStack = new NavPathStack();  
  @State phoneNumber: string = ''  
  
  onBackPress(): boolean | void {  
    console.log('heqian');  
  }  
  build() {  
    NavDestination() {  
      Column() {  
        Text('PageInEntry')  
        Text('phoneNumber:' + this.phoneNumber)  
      }.width('100%').height('100%')  
    }.title('PageInEntry')  
    .onReady((context: NavDestinationContext) => {  
      this.pageInfos = context.pathStack;  
      this.phoneNumber = context.pathInfo.param as string;  
      console.log("current page config info is " + JSON.stringify(context.getConfigInRouteMap()))  
    })  
  }  
}
//entry模块 router_map.json, 需要再module.json5配置"routerMap": "$profile:router_map"  
{  
"routerMap": [  
{  
"name": "PageInEntry",  
"pageSourceFile": "src/main/ets/pages/PageInEntry.ets",  
"buildFunction": "PageInEntryBuilder",  
"data": {  
"description" : "this is PageInEntry"  
}  
}  
]  
}
// HSP模块 PageInHsp.ets  
class TmpClass {  
  count: number = 10  
}  
@Builder  
export function PageInHspBuilder(name: string, param: Object) {  
  PageInHsp()  
}  
@Component  
export struct PageInHsp {  
  pageInfos: NavPathStack = new NavPathStack();  
  build() {  
    NavDestination() {  
      Column() {  
        Text('PageInHsp')  
      }  
    }.title('PageInHsp')  
    .onBackPressed(() => {  
      const popDestinationInfo = this.pageInfos.pop() // 弹出路由栈栈顶元素  
      console.log('pop' + '返回值' + JSON.stringify(popDestinationInfo))  
      return true  
    }).onReady((context: NavDestinationContext) => {  
      this.pageInfos = context.pathStack  
    })  
  }  
}
//HSP模块 router_map.json, 需要再module.json5配置"routerMap": "$profile:router_map"  
{  
"routerMap": [  
{  
"name": "PageInHsp",  
"pageSourceFile": "src/main/ets/pages/PageInHsp.ets",  
"buildFunction": "PageInHspBuilder",  
"data": {  
"description" : "this is PageInHsp"  
}  
}  
]  
}
// Har模块 PageInHar.ets  
class TmpClass {  
  count: number = 10  
}  
@Builder  
export function PageInHarBuilder(name: string, param: Object) {  
  PageInHar()  
}  
@Component  
export struct PageInHar {  
  pageInfos: NavPathStack = new NavPathStack();  
  
  build() {  
    NavDestination() {  
      Column() {  
        Text('PageInHar')  
          .onClick(() => {  
            this.pageInfos.pushPathByName('PageInEntry', '123')  
          })  
      }  
    }.title('PageInHar')  
    .onBackPressed(() => {  
      const popDestinationInfo = this.pageInfos.pop() // 弹出路由栈栈顶元素  
      console.log('pop' + '返回值' + JSON.stringify(popDestinationInfo))  
      return true  
    }).onReady((context: NavDestinationContext) => {  
      this.pageInfos = context.pathStack  
    })  
  }  
}
//Har模块 router_map.json, 需要再module.json5配置"routerMap": "$profile:router_map"  
{  
"routerMap": [  
{  
"name": "PageInHar",  
"pageSourceFile": "src/main/ets/pages/PageInHar.ets",  
"buildFunction": "PageInHarBuilder",  
"data": {  
"description" : "this is PageInHar"  
}  
}  
]  
}

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-navigation-navigation-V5#%E7%B3%BB%E7%BB%9F%E8%B7%AF%E7%94%B1%E8%A1%A8

分享
微博
QQ
微信
回复
2024-10-16 16:51:31
相关问题
HarmonyOS Navigation 使用问题
432浏览 • 1回复 待解决
HarmonyOS关于navigation问题
558浏览 • 1回复 待解决
HarmonyOS Navigation路由问题
56浏览 • 1回复 待解决
HarmonyOS Navigation组件hideNavBar问题
39浏览 • 1回复 待解决
HarmonyOSNavigation显示dialog问题
473浏览 • 1回复 待解决
HarmonyOS Navigation和Tab组件问题
925浏览 • 1回复 待解决
HarmonyOS 关于Navigation组件的问题
470浏览 • 1回复 待解决
Navigation页面跳转的问题
471浏览 • 1回复 待解决
HarmonyOS 使用Navigation的一些疑问
330浏览 • 1回复 待解决
HarmonyOS Navigation和router的使用场景
403浏览 • 2回复 待解决
如何在Navigation使用LocalStorage
447浏览 • 1回复 待解决
如何使用Navigation的navPathStack参数
1428浏览 • 1回复 待解决
HarmonyOS Navigation组件
263浏览 • 1回复 待解决
HarmonyOS Navigation转场?
135浏览 • 0回复 待解决
Navigation管理多页面堆栈太多问题
1869浏览 • 1回复 待解决