qidao123.com技术社区-IT企服评测·应用市场
标题:
鸿蒙HarmonyOS 5.0开辟实战:页面间共享组件实例的实现案例
[打印本页]
作者:
立山
时间:
3 天前
标题:
鸿蒙HarmonyOS 5.0开辟实战:页面间共享组件实例的实现案例
往期鸿蒙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企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/)
Powered by Discuz! X3.4