鸿蒙HarmonyOS 5.0开辟实战:页面间共享组件实例的实现案例 ...

打印 上一主题 下一主题

主题 1972|帖子 1972|积分 5916

 往期鸿蒙5.0全套实战文章必看:(文中附带鸿蒙5.0全栈学习资料)



  • 鸿蒙开辟核心知识点,看这篇文章就够了
  • 最新版!鸿蒙HarmonyOS Next应用开辟实战学习路线
  • 鸿蒙HarmonyOS NEXT开辟技能最全学习路线指南
  • 鸿蒙应用开辟实战项目,看这一篇文章就够了(部门项目附源码)

页面间共享组件实例的案例

介绍

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



使用阐明
页面间共享地图组件的场景:


  • 使用地图组件替换代码中模拟的地图组件。
  • 添加新页面,需要预留地图组件的显示地区,参考首页代码的实现。
其他组件实例共享的场景:


  • 参考实现思路即可。
实现思路

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

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


  • 通过Stack容器,下层放地图组件,上层放Navigation组件管理两个页面,且需要设置Navigation组件的事故透传到地图组件。
  1.   build() {
  2.     Stack({alignContent: Alignment.Bottom}) {
  3.       // 地图组件放在底层,navigation组件放在上层,navigation中的页面需要显示地图组件的位置处设置透明和事件透传
  4.       MapComponent()
  5.       // 应用主页用NavDestination承载,Navigation为空页面直接跳转到MainPage主页面
  6.       Navigation(this.pageStackForComponentSharedPages) {
  7.       }
  8.       .onAppear(()=>{
  9.         this.pageStackForComponentSharedPages.pushPathByName("MainPage", null, false)
  10.       })
  11.       .hideTitleBar(true)
  12.       // navigation组件设置事件透传给兄弟组件
  13.       .hitTestBehavior(HitTestMode.Transparent)
  14.       .navDestination(this.pageMap)
  15.     }
  16.     .width('100%')
  17.     .height('100%')
  18.   }
复制代码


  • Navigation中的页面需要显示地图的地区设置透明,由于本示例主页面是一个Scroll,以是选择放一个空的Column容器组件占位,默认是透明源码参考。
  1. // 页面用于显示地图的区域,放一个空的容器组件,背景默认透明,来显示下层的地图组件(该组件父组件也需要设置透明)
  2. Column() {
  3. }
  4. .width('100%')
  5. .height(this.transParentInitHeight)
复制代码


  • 为避免上层内容地区(非透明地区)的事故也影响下层地图组件,需要分别设置地图组件和内容地区对事故的相应范围,两组相应地区不重叠,随内容地区的变化而变化。
  1.   // 地图组件的手势事件响应区域设置
  2.   .responseRegion({
  3.     x: 0,
  4.     y: 0,
  5.     width: '100%',
  6.     height: this.mapResponseRegionHeight
  7.   })
复制代码
  1.   // 主页面的手势事件响应区域设置
  2.   .responseRegion({
  3.     x: 0,
  4.     y: this.mapResponseRegionHeight,
  5.     width: '100%',
  6.     height: this.pageHeight - this.mapResponseRegionHeight
  7.   })
复制代码


  • 主页面Scroll滑动过程中Column组件(透明,用于显示下层地图组件)渐渐划出页面,地图的显示地区随之变化,因此需要滑动过程中更新地图的事故相应地区源码参考。
  1.   .onScrollFrameBegin((offset) => {
  2.     this.scrollCurOffset = this.scroller.currentOffset().yOffset;
  3.     this.mapResponseRegionHeight =
  4.       this.transParentInitHeight - this.scrollCurOffset > 0 ? this.transParentInitHeight - this.scrollCurOffset:0;
  5.     return {offsetRemain : offset}
  6.   })
复制代码
高性能知识点



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

  1. componentinstancesharedinpages                  // har类型
  2. |---src/main/ets/pages
  3. |   |---ComponentSharedInPages.ets              // 视图层-壳页面
  4. |   |---MainPage.ets                            // 视图层-主页面
  5. |   |---TakeTaxiDetailPage.ets                  // 视图层-打车页面
  6. |---src/main/ets/Components
  7. |   |---MapComponent.ets                        // 视图层-地图组件
  8. |---src/main/ets/model
  9. |   |---CommonConstants.ets                     // 模型层-通用常量
复制代码



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立山

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表