往期鸿蒙5.0全套实战文章必看:(文中附带鸿蒙5.0全栈学习资料)
- 鸿蒙开辟核心知识点,看这篇文章就够了
- 最新版!鸿蒙HarmonyOS Next应用开辟实战学习路线
- 鸿蒙HarmonyOS NEXT开辟技能最全学习路线指南
- 鸿蒙应用开辟实战项目,看这一篇文章就够了(部门项目附源码)
页面间共享组件实例的案例
介绍
本示例提供组件实例在页面间共享的解决方案:通过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 // 模型层-通用常量
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |