HarmonyOS 鸿蒙Next NavPathStack怎么获取栈上的页面对象

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

HarmonyOS 鸿蒙Next NavPathStack怎么获取栈上的页面对象

我把页面push到NavPathStack里面,用

this.pageInfos.pushPathByName("defaultWebPage", paramObject)

现在我想获取到栈里面第3个元素对应的页面对象,需要怎么获取。

NavPathStack我是这样用的:

@Provide('pageInfos') pageInfos: NavPathStack = new NavPathStack()
2 回复

试下这个demo,在target.pathInfo获取页面参数,判断参数执行自己的逻辑

// Index.ets
import { JSON } from '@kit.ArkTS';
class TmpClass{
  count:number=10
}

@Entry
@Component
struct NavigationIndex {
  pageInfos: NavPathStack = new NavPathStack()

  aboutToAppear(): void {
    this.registerInterception()
  }

  registerInterception() {
    this.pageInfos.setInterception({
      willShow: (from: NavDestinationContext | "navBar", to: NavDestinationContext | "navBar",
        operation: NavigationOperation, animated: boolean) => {
        if (typeof to === "string") {
          console.log("target page is navigation home");
          return;
        }
        // redirect target page.Change pageTwo to pageOne.
        let target: NavDestinationContext = to as NavDestinationContext;
        console.log('输出:',target.pathInfo)
        console.log('输出:',JSON.stringify(target.pathInfo))
        if (target.pathInfo.name === 'pageTwo') {
          target.pathStack.pop();
          target.pathStack.pushPathByName('pageOne', null);
        }
      },
      didShow: (from: NavDestinationContext | "navBar", to: NavDestinationContext | "navBar",
        operation: NavigationOperation, isAnimated: boolean) => {
        if (typeof from === "string") {
          console.log("current transition is from navigation home");
        } else {
          console.log(`current transition is from ${from.pathInfo.name}`)
        }
        if (typeof to === "string") {
          console.log("current transition to is navBar");
        } else {
          console.log(`current transition is to ${(to as NavDestinationContext).pathInfo.name}`);
        }
      },
      modeChange: (mode: NavigationMode) => {
        console.log(`current navigation mode is ${mode}`);
      }
    })
  }

  build() {
    Column(){
      Navigation(this.pageInfos) {
        Column() {
          Button('pushPath', { stateEffect: true, type: ButtonType.Capsule })
            .width('80%')
            .height(40)
            .margin(20)
            .onClick(() => {
              this.pageInfos.pushPath({ name: 'pageOne' }) //将name指定的NavDestination页面信息入栈
            })
          Button('路由拦截', { stateEffect: true, type: ButtonType.Capsule })
            .width('80%')
            .height(40)
            .margin(20)
            .onClick(() => {
              // this.pageInfos.pushPath({ name: 'pageTwo' }) //将name指定的NavDestination页面信息入栈
              let tmp = new TmpClass()
              this.pageInfos.pushPathByName('pageTwo', tmp)
            })
        }
      }.title('NavIndex')
    }
  }
}

看这个文档吧 华为开发者联盟 - ArkTS 导航

更多关于HarmonyOS 鸿蒙Next NavPathStack怎么获取栈上的页面对象的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,NavPathStack 是一个管理导航路径的组件,用于记录应用中的页面导航历史。要获取栈上的页面对象,可以通过 NavPathStack 提供的接口来实现。具体方法如下:

在HarmonyOS的API中,NavPathStack 提供了访问导航路径中各个页面信息的方法。你可以使用 getPages() 方法来获取当前导航栈中的所有页面对象。这个方法会返回一个包含页面对象的列表,每个页面对象通常是一个实现了 Page 接口的实例。

示例代码(伪代码,具体实现需参考实际API文档):

// 假设你已经有了NavPathStack的实例navPathStack
List<Page> pages = navPathStack.getPages();
for (Page page : pages) {
    // 这里可以处理每个页面对象,例如获取页面标题、ID等
    String pageTitle = page.getTitle(); // 示例方法,具体方法需参考API文档
    // ... 其他处理逻辑
}

注意,上述代码中的 getTitle() 方法仅为示例,实际获取页面信息的方法需根据HarmonyOS的API文档来确定。

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

回到顶部