美文网首页Android开发@IT·互联网鸿蒙(HarmonyOS)开发知识
HarmonyOS 应用开发-页面间共享组件实例的案例

HarmonyOS 应用开发-页面间共享组件实例的案例

作者: 迪士尼在逃程序员 | 来源:发表于2024-08-19 22:16 被阅读0次

介绍

本示例提供组件实例在页面间共享的解决方案:通过Stack 容器,下层放地图组件,上层放Navigation 组件来管理页面,页面可以共享下层的地图组件,页面中需要显示地图的区域设置为透明,并参考 触摸交互控制,设置事件透传及响应区域。

效果图预览

使用说明

页面间共享地图组件的场景:

  • 使用地图组件替换代码中模拟的地图组件。
  • 添加新页面,需要预留地图组件的显示区域。

其他组件实例共享的场景:

  • 参考实现思路即可。

实现思路

场景:组件实例页面间共享

本示例实现模拟的地图组件实例在两个页面间共享。

  • 通过Stack容器,下层放地图组件,上层放Navigation组件管理两个页面,且需要设置Navigation组件的事件透传到地图组件。
  build() {
    Stack({alignContent: Alignment.Bottom}) {
      // 地图组件放在底层,navigation组件放在上层,navigation中的页面需要显示地图组件的位置处设置透明和事件透传
      MapComponent()
      // 应用主页用NavDestination承载,Navigation为空页面直接跳转到MainPage主页面
      Navigation(this.pageStackForComponentSharedPages) {
      }
      .onAppear(()=>{
        this.pageStackForComponentSharedPages.pushPathByName("MainPage", null, false)
      })
      .hideTitleBar(true)
      // navigation组件设置事件透传给兄弟组件
      .hitTestBehavior(HitTestMode.Transparent)
      .navDestination(this.pageMap)
    }
    .width('100%')
    .height('100%')
  }
  • Navigation中的页面需要显示地图的区域设置透明,由于本示例主页面是一个Scroll,所以选择放一个空的Column容器组件占位。
 // 页面用于显示地图的区域,放一个空的容器组件,背景默认透明,来显示下层的地图组件(该组件父组件也需要设置透明)
 Column() {
 }
 .width('100%')
 .height(this.transParentInitHeight)
  • 为避免上层内容区域(非透明区域)的事件也影响下层地图组件,需要分别设置地图组件和内容区域对事件的响应范围,两组响应区域不重叠,随内容区域的变化而变化。
  // 地图组件的手势事件响应区域设置
  .responseRegion({
    x: 0,
    y: 0,
    width: '100%',
    height: this.mapResponseRegionHeight
  })
  // 主页面的手势事件响应区域设置
  .responseRegion({
    x: 0,
    y: this.mapResponseRegionHeight,
    width: '100%',
    height: this.pageHeight - this.mapResponseRegionHeight
  })
  • 主页面Scroll滑动过程中Column组件(透明,用于显示下层地图组件)逐渐划出页面,地图的显示区域随之变化,因此需要滑动过程中更新地图的事件响应区域。
  .onScrollFrameBegin((offset) => {
    this.scrollCurOffset = this.scroller.currentOffset().yOffset;
    this.mapResponseRegionHeight =
      this.transParentInitHeight - this.scrollCurOffset > 0 ? this.transParentInitHeight - this.scrollCurOffset:0;
    return {offsetRemain : offset}
  })

高性能知识点

  • ForEach 循环渲染会一次性加载所有组件,会导致页面启动时间长,影响用户体验,长列表场景推荐使用数据懒加载。
  • onActionUpdate、onScrollFrameBegin、onAreaChange,这些函数是系统高频回调函数,避免在函数中进行冗余或耗时操作。例如应该减少或避免在函数打印日志,会有较大的性能损耗。

工程结构&模块类型

componentinstancesharedinpages                  // har类型
|---src/main/ets/pages
|   |---ComponentSharedInPages.ets              // 视图层-壳页面 
|   |---MainPage.ets                            // 视图层-主页面
|   |---TakeTaxiDetailPage.ets                  // 视图层-打车页面
|---src/main/ets/Components
|   |---MapComponent.ets                        // 视图层-地图组件 
|---src/main/ets/model
|   |---CommonConstants.ets                     // 模型层-通用常量 

写在最后

如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙

  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
  • 想要获取更多完整鸿蒙最新学习知识点,请移步前往小编:https://gitee.com/MNxiaona/733GH/blob/master/jianshu

相关文章

  • HarmonyOS开发 C++中打印日志

    在HarmonyOS应用开发中打印日志很简单,HarmonyOS提供了HiLog日志系统,帮助开发者了解应用/服务...

  • 使用Java开发HarmonyOS

    开发准备 本文适用于HarmonyOS应用开发的初学者。通过构建一个简单的具有页面跳转功能的应用(如下图预览器运行...

  • RN-生命周期相关的五个函数

    01:getDefaultProps:组件实例创建前调用,多个实例间共享引用。注意:如果父组件传递过来的Props...

  • 6. Vue 引入vuex store

    0.开始之前 如果打算开发一个大型的单页应用,使用vuex比较合适。它可以让页面中多个组件共享变量,即单页面中全局...

  • HarmonyOS应用开发

    HarmonyOS官方开发文档地址:https://www.harmonyos.com/cn/develop[ht...

  • 面试常问的Android四大组件之ContentProvider

    简介 ContentProvider是Android系统中为开发者专门提供的不同应用间进行数据共享的组件,其提供了...

  • vue3教程

    全局API createApp 返回一个提供应用上下文的应用实例。应用实例挂载的整个组件树共享同一个上下文。 de...

  • vue3.0 全局API

    createApp返回一个提供应用上下文的应用实例。应用实例挂载的整个组件树共享同一个上下文,可以在 create...

  • vuex状态管理

    vue-cli开发中,多个组件间通信可以采用vuex状态管理,使多个实例共享一份数据 1.安装vuex npm i...

  • React-Hook:useContext

    useReact的应用场景:在组件间共享状态 假设现在有两个组件,想要共享状态,可以使用React.createC...

网友评论

    本文标题:HarmonyOS 应用开发-页面间共享组件实例的案例

    本文链接:https://www.haomeiwen.com/subject/xhetxjtx.html