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

发布于 1周前 作者 wuwangju 来自 鸿蒙OS

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

2 回复

可以参考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;
  })
}

更多关于HarmonyOS 鸿蒙Next 页面中的组件能否感知页面变化的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,页面中的组件能否感知页面变化主要取决于组件的设计和实现方式,以及页面变化的具体类型。

HarmonyOS提供了丰富的组件库和页面管理机制,允许开发者构建动态、响应式的用户界面。通常,组件可以通过监听页面或父组件的状态变化、属性变化等事件来感知页面变化。例如,如果页面发生了滚动、尺寸变化或数据更新等,组件可以通过绑定相应的事件处理函数或监听属性变化来响应这些变化。

具体来说,组件可以通过以下方式感知页面变化:

  • 事件监听:组件可以监听页面上的各种事件,如点击、滑动、尺寸变化等,从而做出相应的响应。
  • 属性绑定:组件的属性可以与页面的数据或状态进行绑定,当页面数据或状态发生变化时,组件的属性也会相应更新。
  • 生命周期方法:组件有自己的生命周期方法,如onAttachedonDetached等,这些方法可以在组件被添加到页面或从页面移除时执行,从而感知页面的变化。

如果组件的设计和实现支持上述机制,那么它就能够感知并响应页面的变化。如果问题依旧没法解决请联系官网客服,官网地址是https://www.itying.com/category-93-b0.html

回到顶部