2

代码:

@Entry
@Component
struct Index {
  @Provide('NavPathStack') pageInfos: NavPathStack = new NavPathStack();

  @Builder
  PagesMap(name: string) {
    if (name == 'pageOneTmp') {
      pageOneTmp()
    } else if (name == 'pageTowTmp') {
      pageTowTmp()
    }
  }

  build() {
    Navigation(this.pageInfos) {
      Button('Push pageOneTmp')
        .margin(20)
        .width('80%')
        .onClick(() => {
          this.pageInfos.pushPathByName('pageOneTmp', '');
        });
      Button('Push pageTowTmp')
        .margin(20)
        .width('80%')
        .onClick(()=>{
          this.pageInfos.pushPathByName('pageTowTmp', '')
        })
    }
    .title('Main')
    .navDestination(this.PagesMap)
  }
}

@Component
export struct pageOneTmp {
  @Consume('NavPathStack') pageInfos: NavPathStack;
  build() {
    NavDestination() {
      Column() {
        Text('NavDestinationContent1')
        Button('Push pageTowTmp')
          .margin(20)
          .width('80%')
          .onClick(() => {
            this.pageInfos.pushPathByName('pageTowTmp', '');
          })
      }
      .width('100%')
      .height('100%')
    }
    .title("pageOneTmp")
    .onBackPressed(()=>{
      const popDestionationInfo = this.pageInfos.pop()
      return true
    })
  }
}

@Component
export struct pageTowTmp {
  @Consume('NavPathStack') pageInfos: NavPathStack;
  build() {
    NavDestination() {
      Column() {
        Text('NavDestinationContent2')
        Button('Push pageOneTmp')
          .margin(20)
          .width('80%')
          .onClick(() => {
            this.pageInfos.pushPathByName('pageOneTmp', '');
          })
        Button('clear')
          .margin(20)
          .width('80%')
          .onClick(()=>{
            this.pageInfos.clear(true)
          })
      }
      .width('100%')
      .height('100%')
    }.title("pageTowTmp")
    .onBackPressed(()=>{
      const popDestionationInfo = this.pageInfos.pop()
      return true
    })
  }
}

分析:
根据提供的代码和操作序列,我们来重新审视页面的路由栈变化情况:

  • 从Main页面点击'Push pageOneTmp'按钮:
    pageInfos.pushPathByName('pageOneTmp', '');
    路由栈大小变为2(Main -> pageOneTmp)。
  • 在pageOneTmp中点击'Push pageTowTmp'按钮:
    pageInfos.pushPathByName('pageTowTmp', '');
    路由栈大小变为3(Main -> pageOneTmp -> pageTowTmp)。
  • 在pageTowTmp中点击'Push pageOneTmp'按钮:
    pageInfos.pushPathByName('pageOneTmp', '');
    路由栈大小变为4(Main -> pageOneTmp -> pageTowTmp -> pageOneTmp)。
  • 在pageOneTmp中再次点击'Push pageTowTmp'按钮:
    pageInfos.pushPathByName('pageTowTmp', '');
    路由栈大小变为5(Main -> pageOneTmp -> pageTowTmp -> pageOneTmp -> pageTowTmp)。
  • 在pageTowTmp中点击'clear'按钮:
    pageInfos.clear(true); 根据clear(true)方法的调用,它会清除导航栈中的所有条目,但保留根页面(即Main)。因此,最终的路由栈大小应为1(仅剩Main)。

金刚鹦鹉
4.9k 声望260 粉丝