代码拉取完成,页面将自动刷新
本示例提供组件实例在页面间共享的解决方案:通过Stack容器,下层放地图组件,上层放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%')
}
// 页面用于显示地图的区域,放一个空的容器组件,背景默认透明,来显示下层的地图组件(该组件父组件也需要设置透明)
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
})
.onScrollFrameBegin((offset) => {
this.scrollCurOffset = this.scroller.currentOffset().yOffset;
this.mapResponseRegionHeight =
this.transParentInitHeight - this.scrollCurOffset > 0 ? this.transParentInitHeight - this.scrollCurOffset:0;
return {offsetRemain : offset}
})
componentinstancesharedinpages // har类型
|---src/main/ets/pages
| |---ComponentSharedInPages.ets // 视图层-壳页面
| |---MainPage.ets // 视图层-主页面
| |---TakeTaxiDetailPage.ets // 视图层-打车页面
|---src/main/ets/Components
| |---MapComponent.ets // 视图层-地图组件
|---src/main/ets/model
| |---CommonConstants.ets // 模型层-通用常量
本实例依赖common模块来实现日志的打印、资源 的调用,依赖routermodule模块来实现路由注册管理。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。