在鸿蒙Next(HarmonyOS NEXT)中,可以通过页面路由机制传递参数或回调函数来调用上一个页面的函数。以下是具体方法和示例代码:
方法一:使用路由参数传递回调函数
- 当前页面(PageA):定义函数并传递到下一个页面。
- 目标页面(PageB):接收参数并调用回调函数。
示例代码:
PageA(上一个页面):
import router from '@ohos.router';
// 定义回调函数
const myCallback = (data: string) => {
console.log('PageA收到数据:', data);
};
// 跳转到PageB并传递回调函数
router.pushUrl({
url: 'pages/PageB',
params: { callback: myCallback } // 传递函数引用
});
PageB(当前页面):
import router from '@ohos.router';
// 获取传递的参数
const params = router.getParams() as { callback: (data: string) => void };
// 调用回调函数
params.callback?.(‘来自PageB的数据’);
// 返回PageA
router.back();
方法二:使用AppStorage全局状态管理
适用于跨页面函数调用,通过全局状态触发函数执行。
示例代码:
AppStorage定义:
import { AppStorage } from '@ohos.data.AppStorage';
// 存储回调函数
AppStorage.setOrCreate('pageAFunction', null);
PageA:
import { AppStorage } from '@ohos.data.AppStorage';
// 注册全局函数
AppStorage.set('pageAFunction', (data: string) => {
console.log('PageA执行:', data);
});
PageB:
import { AppStorage } from '@ohos.data.AppStorage';
// 获取并调用全局函数
const func = AppStorage.get('pageAFunction');
func?.('来自PageB的调用');
注意事项:
- 路由参数传递适用于简单回调,但注意函数引用可能受生命周期影响。
- AppStorage适合复杂场景,但需注意内存管理,避免循环引用。
- 使用前确保导入正确的HarmonyOS SDK模块。
选择方法根据实际场景:简单数据回调用路由参数,跨页面复杂交互用AppStorage。