HarmonyOS 如何实现类似startActivityForResult

关闭当前页面,返回上个页面中,并且能传递当前页面的数据到上个页面中(不需要用到状态管理的实现方式,通过接口传递方式有没有)

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

可以使用【页面级UI状态存储】https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-localstorage-V5

或者使用Emitter进行数据传递,参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/itc-with-emitter-V5

如果是用router传参数可以参考如下实现:

har包下第一个界面:FirstHarPage

import router from '@ohos.router';
import { CustomButton } from '../../common/CustomButton';

import('../secondharpage/SecondHarPage')

@Entry({ routeName: 'FirstHarPage' })
@Component
export struct FirstHarPage {
  onPageShow(): void {
    let backParams = router.getParams() as RouteParams;
    console.info('onPageShow: ' + JSON.stringify(backParams));
    backParams.hasBackValue = false;
  }

  build() {
    Row() {
      Column() {
        Text('FirstHarPage').fontSize(36).textAlign(TextAlign.Center).width('100%')
        CustomButton({ mTitle: '跳转到第二个界面' }).onClick(() => {
          let routeParams = new RouteParams('value1', 'value2');
          router.pushNamedRoute({ name: 'SecondHarPage', params: routeParams })
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}

export class RouteParams {
  constructor(key1: string, key2: string) {
    this.key1 = key1;
    this.key2 = key2;
  }

  public key1?: string;
  public key2?: string;
  public hasBackValue: boolean = false;
}

har包下第二个界面:SecondHarPage
import router from '@ohos.router';
import { RouteParams } from '../firstharpage/FirstHarPage';

@Entry({ routeName: 'SecondHarPage' })
@Component
export struct SecondHarPage {
  @State message: string = 'Hello World';

  onPageShow(): void {
    let params = router.getParams() as RouteParams;
    console.info('aboutToAppear: ' + JSON.stringify(params));
  }

  build() {
    Row() {
      Column() {
        Text(this.message.fontSize(50).fontWeight(FontWeight.Bold)
      }
      .width('100%')
    }
    .height('100%')
  }

  onBackPress(): boolean | void {
    let backParams = new RouteParams('backValue1', 'backvalue2');
    backParams.hasBackValue = true;
    router.back({ url: '', params: backParams })
    return true;
  }
}
分享
微博
QQ
微信
回复
1天前
相关问题
如何实现类似keyframes的效果
1905浏览 • 1回复 待解决
如何实现类似插槽的功能
1963浏览 • 1回复 待解决
如何实现类似.9 图的功能
1399浏览 • 1回复 待解决
HarmonyOS 类似翻页效果实现
82浏览 • 1回复 待解决
HarmonyOS 怎么实现类似SnackBar的效果
30浏览 • 1回复 待解决
HarmonyOS上RN实现tabview类似的demo
30浏览 • 1回复 待解决
鸿蒙-如何实现类似于HOME键的功能
10815浏览 • 2回复 待解决
FileObserver在NEXT中类似实现
1766浏览 • 1回复 待解决