HarmonyOS 鸿蒙Next Navigation怎么在工具类中pop

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

HarmonyOS 鸿蒙Next Navigation怎么在工具类中pop

Navigation想使用pop是需要在page中定义一个appPathStack: NavPathStack; 但我在工具类中,也想pop到根目录,但是定义不了appPathStack,如何实现pop呢

2 回复

请参考一下代码: 1.PageOne.ets

import { Utility } from './utility'

class TmpClass{

  count:number=10

}

@Builder

export function PageOneBuilder(name: string, param: Object) {

  PageOne()

}

@Component

export struct PageOne {

  pageInfos: NavPathStack = new NavPathStack()

  build() {

    NavDestination() {

      Column() {

        Button('pushPathByName', { stateEffect: true, type: ButtonType.Capsule })

          .width('80%')

          .height(40)

          .margin(20)

          .onClick(() => {

            let tmp = new TmpClass()

            this.pageInfos.pushPathByName('pageTwo', tmp) //将name指定的NavDestination页面信息入栈,传递的数据为param

          })

        Button('工具类中返回', { stateEffect: true, type: ButtonType.Capsule })

          .width('80%')

          .height(40)

          .margin(20)

          .onClick(() => {

             new Utility(this.pageInfos).pop()

            // uuu.pop()

          })

      }.width('100%').height('100%')

    }.title('pageOne')

    .onBackPressed(() => {

      console.log('触发了。。。。。。。')

      return false

    }).onReady((context: NavDestinationContext) => {

      this.pageInfos = context.pathStack

    })

  }

}

2.utility.ets

export  class Utility{

  pageInfos: NavPathStack

  constructor(pageInfos: NavPathStack) {

    this.pageInfos = pageInfos

  }

  pop(){

   let  responseCode:number =200

    if (responseCode == 200) {

      this.pageInfos.pop()

    }else {

      console.info('出错了')

    }

  }

}

3.其他页面代码请参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-navigation-V5#示例2

请参考一下代码:

1.PageOne.ets

// PageOne.ets

import { Utility } from './utility'

class TmpClass{

  count:number=10

}

@Builder

export function PageOneBuilder(name: string, param: Object) {

  PageOne()

}

@Component

export struct PageOne {

  pageInfos: NavPathStack = new NavPathStack()

  aboutToAppear(): void {

  }

  build() {

    NavDestination() {

      Column() {

        Button('pushPathByName', { stateEffect: true, type: ButtonType.Capsule })

          .width('80%')

          .height(40)

          .margin(20)

          .onClick(() => {

            let tmp = new TmpClass()

            this.pageInfos.pushPathByName('pageTwo', tmp) //将name指定的NavDestination页面信息入栈,传递的数据为param

          })

        Button('工具类中返回', { stateEffect: true, type: ButtonType.Capsule })

          .width('80%')

          .height(40)

          .margin(20)

          .onClick(() => {

             new Utility().pop()

            // uuu.pop()

          })

      }.width('100%').height('100%')

    }.title('pageOne')

    .onBackPressed(() => {

      console.log('触发了。。。。。。。')

      return false

    }).onReady((context: NavDestinationContext) => {

      this.pageInfos = context.pathStack

    AppStorage.setOrCreate('PropA',this.pageInfos);

    })

  }

}

2.utility.ets

export  class Utility{

  pageInfos: NavPathStack | undefined = AppStorage.get('PropA')

  pop(){

   let  responseCode:number =200

    if (responseCode == 200) {

      if (this.pageInfos) {

        this.pageInfos.pop()

      }

      console.info('ssss=',this.pageInfos?.getAllPathName())

    }else {

      console.info('出错了')

    }

  }

}

更多关于HarmonyOS 鸿蒙Next Navigation怎么在工具类中pop的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,Next Navigation的pop操作通常用于返回上一个页面或移除当前页面栈中的页面。如果你希望在工具类中实现这一功能,可以通过获取当前页面的Ability实例或者PageStack管理器来进行操作。

具体步骤如下:

  1. 获取当前页面的Ability实例:通过依赖注入或者全局变量等方式,在工具类中持有对当前Ability的引用。

  2. 使用PageStack进行页面管理:在HarmonyOS中,PageStack是管理页面栈的类,你可以通过它执行pop操作来返回上一个页面。

  3. 执行pop操作:一旦获取了页面栈的引用,可以直接调用PageStack.getInstance().pop()方法来移除当前页面。

示例代码(伪代码):

public class NavigationUtils {
    public static void popPage() {
        PageStack.getInstance().pop();
    }
}

注意:上述代码为简化示例,实际使用时需确保PageStack实例已正确初始化且当前上下文支持该操作。

如果工具类中的pop方法未能达到预期效果,可能是由于页面栈管理不当或上下文环境不匹配。请检查相关配置和调用时机。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部