HarmonyOS 页面中的组件能否感知页面变化

我有个聊天页面,页面内发送文件的组件,点击该组件需要跳转到文件查看器页面,在文件查看器页面选中某个文件后,会后退回到聊天页面,此时我如何在发送文件组件获取当前文件查看器页面返回回来的参数

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

请参考demo

//Index.ets
import { pageBTmp, Pages } from './pageB'

@Entry
@Component
struct Index {
  @State message: string = 'Hello World'
  @Provide('pageInfo') pageInfo: NavPathStack = new NavPathStack()

  @Builder
  PageMap(name: string) {
    if (name === 'pageB') {
      pageBTmp({ names: name, values: this.pageInfo } as Pages)
    }
  }
  build() {
    Navigation(this.pageInfo) {
      Column() {
        Text(this.message)
          .width('80%')
          .height(50)
          .margin(10)

        CustomComp()
      }
    }.title('NavIndex').navDestination(this.PageMap)
  }
}

class ParamWithOp {
  operation: number = 1
  count: number = 10
}

// A页面中的自定义组件
@Component
struct CustomComp {
  @Consume pageInfo: NavPathStack
  @State routerParams: ParamWithOp | undefined = undefined

  build() {
    Column() {
      Button('pushPath', { stateEffect: true, type: ButtonType.Capsule })
        .width('80%')
        .height(40)
        .margin(10)
        .onClick(() => {
          this.pageInfo.pushPath({name: 'pageB', param: new ParamWithOp(), onPop: (popInfo: PopInfo)=>{
            // 在自定义组件中获取到返回的参数
            this.routerParams = popInfo.result as ParamWithOp
          }});
        })

      Text('返回的数据: ')
      Text(JSON.stringify(this.routerParams))
    }
  }
}

//pageB.ets
export class Pages {
  names: string = ""
  values: NavPathStack | null = null
}

class ParamWithOp {
  operation: number = 1
  count: number = 10
  constructor(count: number) {
    this.count = count;
  }
}

@Builder
export function pageBTmp(info: Pages) {
  NavDestination() {
    Column() {
      Button('pop', { stateEffect: true, type: ButtonType.Capsule })
        .width('80%')
        .height(40)
        .margin(20)
        .onClick(() => {
          // 回退到上一个页面,将处理结果传入push的onPop回调中。
          (info.values as NavPathStack).pop(new ParamWithOp(111));
        })


    }.width('100%').height('100%')
  }.title('pageB')
  .onBackPressed(() => {
    // 回退到上一个页面,将处理结果传入push的onPop回调。
    (info.values as NavPathStack).pop(new ParamWithOp(0));
    return true;
  })
}
分享
微博
QQ
微信
回复
3天前
相关问题
UIAbility是否可以监听页面变化
1572浏览 • 1回复 待解决
HarmonyOS 页面高度发生变化
336浏览 • 1回复 待解决
HarmonyOS能否全局监听页面的生命周期
749浏览 • 1回复 待解决