HarmonyOS 鸿蒙Next中如何进行页面传值?

HarmonyOS 鸿蒙Next中如何进行页面传值?

3 回复

使用router中的params属性进行传值, 在跳转页面使用aboutToAppear(){const res =router.getparams()}进行接受完成页面传值

参考:https://developer.huawei.com/consumer/cn/forum/topic/0202171299967930633?fid=0109140870620153026

更多关于HarmonyOS 鸿蒙Next中如何进行页面传值?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next中,页面传值主要使用Want和AbilityConstant模块。通过Want对象携带参数,在startAbility时传递。接收方在onCreate回调中通过AbilityConstant模块获取参数。常用方法包括:

  1. Want对象设置参数uri或parameters;
  2. 接收方使用featureAbility.getWant()获取参数。

跨设备传值需使用分布式能力。UI页面间传值可用EventHub发布订阅事件。

在HarmonyOS Next中,页面传值主要有以下几种方式:

  1. 使用AbilityContext的startAbility()传值
let want = {
    bundleName: "com.example.myapp",
    abilityName: "SecondAbility",
    parameters: {
        key1: "value1",
        key2: 123
    }
};
this.context.startAbility(want);
  1. 使用AbilityConstant.StartOptions传值
let options = {
    windowMode: 0,
    parameters: {
        key: "value"
    }
};
this.context.startAbility(want, options);
  1. 通过EventHub进行跨页面通信: 在第一个页面注册事件:
this.context.eventHub.on("myEvent", (data) => {
    console.log("收到数据:" + data);
});

在第二个页面触发事件:

this.context.eventHub.emit("myEvent", "要传递的数据");
  1. 使用AppStorage全局共享数据
AppStorage.SetOrCreate<string>("globalData", "共享值");
let value = AppStorage.Get<string>("globalData");
  1. 使用LocalStorage页面级共享
let storage = new LocalStorage();
@Entry(storage)
@Component
struct MyComponent {
    @LocalStorageProp('key') value: string = 'default';
    
    build() {
        // 使用value
    }
}

选择哪种方式取决于具体场景:

  • 简单数据传递:使用Ability参数传递
  • 跨页面通信:使用EventHub
  • 全局共享数据:使用AppStorage
  • 组件间共享:使用LocalStorage
回到顶部