1、HarmonyOS Tab组件里的tabBar点击如何拦截,根据情况判断是否允许切换tab?
Tab组件里的tabBar点击如何拦截,根据情况判断是否允许切换tab
暂时没有tabBar点击拦截功能实现,可以使用TabsController自定义页签以及并在其中添加事件进行逻辑判断,参考demo如下:
export class ButtonInfoModel {
index: number = 0;
info: string = 'home';
title: string = 'Home';
}
const buttonInfo: ButtonInfoModel[] = [
{
index: 0,
info: 'home',
title: 'Home'
},
{
index: 1,
info: 'map',
title: 'Map'
},
{
index: 2,
info: 'charging',
title: 'Charging'
}
]
@Component
export struct Home {
@State message: string = 'Home';
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
Text('点击之后无法进入charging页,会跳转map页')
.fontSize(20)
.fontWeight(FontWeight.Bold)
.onClick(() => {
buttonInfo[2].info = "map"
})
}
.width('100%')
}
.height('100%')
}
}
@Component
export struct Map {
@State message: string = 'Map';
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
}
.width('100%')
}
.height('100%')
}
}
@Component
export struct Charging {
@State message: string = 'Charging';
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
}
.width('100%')
}
.height('100%')
}
}
2、HarmonyOS @Builder装饰的方法可以作为参数传递吗?
目前不支持这种传参规则。请参考如自定义构建函数的参数传递:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-builder-V5
ArkUI提供了一种轻量的UI元素复用机制@Builder,其内部UI结构固定,仅与使用方进行数据传递,开发者可以将重复使用的UI元素抽象成一个方法,在build方法里调用。
3、HarmonyOS 自定义组件支持链式调用吗?
自定义组件怎么实现系统组件那样的链式调用,如 XX() {}.a(“b”).c(“d”)
使用@Styles或@Extend装饰器,定义组件样式方法时,可以支持链式调用,参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-style-V5
如果每个组件的样式都需要单独设置,在开发过程中会出现大量代码在进行重复样式设置,虽然可以复制粘贴,但为了代码简洁性和后续方便维护,我们推出了可以提炼公共样式进行复用的装饰器@Styles。
@Styles装饰器可以将多条样式设置提炼成一个方法,直接在组件声明的位置调用。通过@Styles装饰器可以快速定义并复用自定义样式。
4、HarmonyOS @Observed 监听多层数据结构失败?
通过@ObjectLink和@Observed类装饰器的配合,在涉及嵌套对象或数组的场景中进行双向数据同步,详情参考:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-observed-and-objectlink.md
5、HarmonyOS 如何实现page页面的横竖屏切换?
目前有页面横竖屏切换的需求,需要如何实现
设置横竖屏切换:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-window-V5#setpreferredorientation9
setPreferredOrientation(orientation: Orientation, callback: AsyncCallback<void>): void
设置主窗口的显示方向属性,使用callback异步回调。仅在支持跟随sensor旋转的设备上生效,2in1设备上调用不生效,自由多窗模式(可点击设备控制中心中的自由多窗按钮开启)下调用不生效,子窗调用后不生效。
窗口尺寸变化的监听:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-window-V5