HarmonyOS 鸿蒙Next页面跳转时候传递信息,让页面进行刷新

HarmonyOS 鸿蒙Next页面跳转时候传递信息,让页面进行刷新 a页面前往b页面。b页面操作结束后返回一个值,a如何在刚返回值的时候就根据值刷新自身界面

2 回复

有以下几种方式:

1) 使用Navigation的情况下可以直接在pageA跳转到pageB时指定pop时需要进行的处理,参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-navigation-V5#ZH-CN_TOPIC_0000001847049960__pushpathbyname11 在跳转页面时传入第三个参数onPop即可

2) 使用router的情况下可以在PageB重写onBackPress事件,对router.back()传参,在PageA的onPageShow中接收参数并进行处理

3) 使用事件总线eventHub传递消息

第二种和第三种参考:

// Page1.ets
import { router } from '@kit.ArkUI';
@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  aboutToAppear(): void {
    getContext().eventHub.on('page2Back', (param:string)=>{
      // 事件总线形式
      console.log('eventHub:: page2 back' + param)
    })
  }
  aboutToDisappear(): void {
  getContext().eventHub.off('page2Back')
  }
  onPageShow(): void {
    let params:ESObject = router.getParams() as ESObject // 接收路由参数形式
    if(params?.refresh){
      console.log('back from page2')
    }
  }
  build() {
    RelativeContainer() {
      Text(this.message)
        .onClick(() =>{
          router.pushUrl({url:'pages/Page2'})
        })
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
    }
    .height('100%')
    .width('100%')
  }
}

// Page2.ets
import { router } from '@kit.ArkUI';
@Entry
@Component
struct Page2 {
  @State message: string = 'Hello World';
  onBackPress(): boolean | void { // 重写onBackPress会拦截返回事件,需要手动调用router.back方法才能完成回退
    router.back({
      url:'pages/Index',
      params: {
        refresh: true
      }
    })
    getContext().eventHub.emit('page2Back','emit')
    return true
  }
  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 }
        })
    }
    .height('100%')
    .width('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next页面跳转时候传递信息,让页面进行刷新的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)Next中,页面跳转时传递信息并实现页面刷新可以通过AbilityContextIntent来实现。首先,使用Intent对象携带需要传递的数据,然后通过startAbilitystartAbilityForResult方法启动目标页面。目标页面可以通过onStartonNewIntent方法接收传递的数据,并根据数据更新UI,实现页面刷新。

例如,假设从PageA跳转到PageB并传递一个字符串数据:

在PageA中:

let intent = new Intent();
intent.setAction("action.pageb");
intent.setParam("key", "value");
this.context.startAbility(intent);

在PageB中:

onStart() {
    let intent = this.context.getIntent();
    let value = intent.getParam("key");
    // 根据value更新UI,实现页面刷新
}

通过这种方式,可以在页面跳转时传递信息,并在目标页面接收数据后进行刷新。

回到顶部