HarmonyOS 鸿蒙Next页面跳转时候传递信息,让页面进行刷新
HarmonyOS 鸿蒙Next页面跳转时候传递信息,让页面进行刷新 a页面前往b页面。b页面操作结束后返回一个值,a如何在刚返回值的时候就根据值刷新自身界面
有以下几种方式:
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中,页面跳转时传递信息并实现页面刷新可以通过AbilityContext
和Intent
来实现。首先,使用Intent
对象携带需要传递的数据,然后通过startAbility
或startAbilityForResult
方法启动目标页面。目标页面可以通过onStart
或onNewIntent
方法接收传递的数据,并根据数据更新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,实现页面刷新
}
通过这种方式,可以在页面跳转时传递信息,并在目标页面接收数据后进行刷新。