写点什么

【每日学点 HarmonyOS Next 知识】tab 拦截、组件方法做参数、自定义组件链式调用、多次观察者监听、横竖屏切换

作者:轻口味
  • 2025-03-15
    北京
  • 本文字数:1658 字

    阅读完需:约 5 分钟

【每日学点HarmonyOS Next知识】tab拦截、组件方法做参数、自定义组件链式调用、多次观察者监听、横竖屏切换

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' }]
@Componentexport 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%') }}
@Componentexport struct Map { @State message: string = 'Map';
build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) } .width('100%') } .height('100%') }}
@Componentexport 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#setpreferredorientation9setPreferredOrientation(orientation: Orientation, callback: AsyncCallback<void>): void


设置主窗口的显示方向属性,使用 callback 异步回调。仅在支持跟随 sensor 旋转的设备上生效,2in1 设备上调用不生效,自由多窗模式(可点击设备控制中心中的自由多窗按钮开启)下调用不生效,子窗调用后不生效。


窗口尺寸变化的监听:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-window-V5


发布于: 刚刚阅读数: 4
用户头像

轻口味

关注

🏆2021年InfoQ写作平台-签约作者 🏆 2017-10-17 加入

Android、音视频、AI相关领域从业者。 欢迎加我微信wodekouwei拉您进InfoQ音视频沟通群 邮箱:qingkouwei@gmail.com

评论

发布
暂无评论
【每日学点HarmonyOS Next知识】tab拦截、组件方法做参数、自定义组件链式调用、多次观察者监听、横竖屏切换_HarmonyOS_轻口味_InfoQ写作社区