HarmonyOS 鸿蒙Next从界面A跳转到界面B,在从界面B跳转到界面C,界面C在跳转到界面A同时要销毁界面B和界面C

HarmonyOS 鸿蒙Next从界面A跳转到界面B,在从界面B跳转到界面C,界面C在跳转到界面A同时要销毁界面B和界面C 从界面A 通过跳转到界面B,用户可以点击返回键 返回到界面A
再从界面B 跳转到界面C,用户可以点击返回键 返回到界面B
界面C在跳转到界面A 此时用户点击返回键不能返回到界面C和界面B

在从界面C 跳转到界面A时 怎样销毁界面C和界面B

7 回复

如果页面跳转使用的是router跳转,可以使用router.clear()方法去清楚页面栈,下面是一个跳转demo

// Page1.ets

import router from '@ohos.router';

@Component
struct Page1 {
  @State message: string = '我是页面A,点我跳转页面B';
  aboutToAppear(): void {
    router.clear();
  }
  build() {
    RelativeContainer() {
      Text(this.message)
        .id('Page1HelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(()=>{
          router.pushUrl({url: 'pages/Page2' })
        })
      Button('back').onClick(()=>{
        router.back();
      })
    }
    .height('100%')
    .width('100%')
  }
}

// Page2.ets

import router from '@ohos.router';

@Component
struct Page2 {
  @State message: string = '我是页面B,点我跳转页面C';

  build() {
    RelativeContainer() {
      Text(this.message)
        .id('Page2HelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(()=>{
          router.pushUrl({url: 'pages/Page3' })
        })
      Button('back').onClick(()=>{
        router.back();
      })
    }
    .height('100%')
    .width('100%')
  }
}

// Page3.ets

import router from '@ohos.router';

@Component
struct Page3 {
  @State message: string = '我是页面C,点我跳转页面A并清空路由栈';

  build() {
    RelativeContainer() {
      Text(this.message)
        .id('Page3HelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        }) 
        .onClick(()=>{
          router.pushUrl({url: 'pages/Page1' })
        })

      Button('back').onClick(()=>{
        router.back();
      })
    }
    .height('100%')
    .width('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next从界面A跳转到界面B,在从界面B跳转到界面C,界面C在跳转到界面A同时要销毁界面B和界面C的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


使用navigation的话,直接使用**页面栈对象.popToName(‘页面A’)**就可以了

有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html

使用router的话,直接使用router.back(‘指定页面就可以了’)

cke_804.png

直接替换栈后清空路由行不行? 你用的什么路由?

跳转到C后,去路由栈里去找到A,B的页面,然后移除掉就行

在HarmonyOS中,通过AbilitySlice实现界面跳转时,可以使用presentterminate方法来控制页面的生命周期。从界面A跳转到界面B,可以使用present方法。接着从界面B跳转到界面C,同样使用present方法。当从界面C跳转回界面A时,可以通过terminate方法销毁界面B和界面C。具体代码示例如下:

// 界面A跳转到界面B
let intentB = new Intent();
intentB.setAbilitySlice("SliceB");
this.present(intentB);

// 界面B跳转到界面C
let intentC = new Intent();
intentC.setAbilitySlice("SliceC");
this.present(intentC);

// 界面C跳转回界面A并销毁界面B和界面C
let intentA = new Intent();
intentA.setAbilitySlice("SliceA");
this.terminate();
this.present(intentA);

通过terminate方法,可以销毁当前页面并返回到指定的页面。

回到顶部