其他
| 关键字 | 注释 | |
|---|---|---|
| module.json5、abilities | <HarmonyOS第一课>运行Hello World-华为开发者学堂 (huawei.com) | |
| struct | 自定义组件基于struct实现 | |
| @Component | 赋予组件化能力 | |
| @Entry | 代表自定义组件可作为页面入口组件 | |
| export | 需要将X文件下的组件交给Y文件下的组件使用的时候 | |
| readonly | 设置该变量为只读 | |
| @Builder | 全局自定义构建函数:$$代表引用函数 | |
| @State | 被装饰拥有其所属组件的状态,可以作为其子组件单向和双向同步的数据源。当其数值改变时,会引起相关组件的渲染刷新。 | |
| @Watch | 监听、观察变量 | |
| @Prop | 被装饰可以和父组件建立单向同步关系,@Prop装饰的变量是可变的,但修改不会同步回父组件。 | |
| @Link | 被装饰变量和父组件构建双向同步关系的状态变量,父组件会接受来子@Link装饰的变量的修改的同步,父组件的更新也会同步给@Link装饰的变量。 | |
| @Provide/@Consume | @Provide/@Consume装饰的变量用于跨组件层级(多层组件)同步状态变量,可以不需要通过参数命名机制传递,通过alias(别名)或者属性名绑定。 | |
| @Observed | @Observed装饰class,需要观察多层嵌套场景的class需要被@Observed装饰。单独使用@Observed没有任何作用,需要和@ObjectLink、@Prop连用。 | |
| @ObjectLink | @ObjectLink装饰的变量接收@Observed装饰的class的实例,应用于观察多层嵌套场景,和父组件的数据源构建双向同步。 | |
| aboutToAppear/aboutToDisappear/onPageShow/onPageHide/onBackPress | 组件生命周期 | |
| router.pushUrl,router.replaceUrl | 页面跳转或者替换,mode参数拥有两种模式:Single、Standard。 | |
| UIAbility | 有三种启动模式:multiton、singleton、specified | |
| (router.getParams() as Record<string, string>)['src'] | 获取上个页面传递的参数 | |
| Stack | 叠放布局 | |
| ===和==区别 | ==是把类型转成一样的再比较,而===则是直接比较类型才比较值 | |
| private value : undefined = undefined | 不确定如何初始化,用于开启了严格空值检测时使用 | |
| private value : X undefined | 被视为联合类型,运行时可能有额外的开销 | |
| let a = null! | 告诉编译器这个值后面肯定会赋值不会为null | |
| @Styles | 抽取 公共样式、事件 不可以传递参数@Styles装饰器:定义组件重用样式-UI范式基本语法-学习ArkTS语言-基础入门 - 华为HarmonyOS开发者 (huawei.com) | |
| @Extend | 扩展 特定组件 样式、事件 可以传递参数 @Extend装饰器:定义扩展组件样式-UI范式基本语法-学习ArkTS语言-基础入门 - 华为HarmonyOS开发者 (huawei.com) | |
| @Builder | 抽取 结构、样式、事件 可以传递参数@Builder装饰器:自定义构建函数-UI范式基本语法-学习ArkTS语言-基础入门 - 华为HarmonyOS开发者 (huawei.com) | |
| context.eventHub.emit | 主线程内通信用EventHub | |
| emitter.on | 主线程与Worker间通信用Emitter |
生命周期:
| 关键字 | 注释 |
|---|---|
| onCreate | 在UI页面可见之前 |
| onWindowStageCreate | 例如用户打开游戏应用,正在打游戏的时候,有一个消息通知,打开消息,消息会以弹窗的形式弹出在游戏应用的上方,此时,游戏应用就从获焦切换到了失焦状态,消息应用切换到了获焦状态。对于消息应用,在onWindowStageCreate回调中,会触发获焦的事件回调,可以进行设置消息应用的背景颜色、高亮等操作。 |
| Foreground | 进入前台:例如用户打开地图应用查看当前地理位置的时候,假设地图应用已获得用户的定位权限授权。在UI页面显示之前,可以在onForeground回调中打开定位功能,从而获取到当前的位置信息。 |
| Background | 进入后台:例如用户打开地图应用查看当前地理位置的时候,假设地图应用已获得用户的定位权限授权。在UI页面显示之前,可以在onForeground回调中打开定位功能,从而获取到当前的位置信息。 |
| onWindowStageDestroy | 可以在该回调中释放UI页面资源 |
| onDestroy | 可以在onDestroy回调中进行系统资源的释放、数据的保存等操作 |
基础组件:
<HarmonyOS第一课>从简单的页面开始-华为开发者学堂 (huawei.com)
| 关键字 | 注释 |
|---|---|
| Text | 文本 |
| Image | 图片,支持加载网络图片 |
| TextInput | 编辑文本框 |
| Button | 按钮 |
| LoadingProgress | 加载进度 |
容器组件:
<HarmonyOS第一课>从简单的页面开始-华为开发者学堂 (huawei.com)
| 关键字 | 注释 |
|---|---|
| Column | 垂直方向布局的容器 |
| Row | 水平方向布局的容器 |
| 属性名称 | 描述 |
|---|---|
| justifyContent | 设置子组件在主轴方向上的对齐格式。 |
| alignItems | 设置子组件在交叉轴方向上的对齐格式。 |
List组件:
<HarmonyOS第一课>从简单的页面开始-华为开发者学堂 (huawei.com)
| 属性名称 | 描述 |
|---|---|
| List | 一般和子组件ListItem一起使用,List列表中的每一个列表项对应一个ListItem组件 |
| ListItem | 一般使用循环搭配使用:ForEach(this.arr, (item: number) => {ListItem() { |
Grid组件:
<HarmonyOS第一课>从简单的页面开始-华为开发者学堂 (huawei.com)
| 属性名称 | 描述 |
|---|---|
| Grid | Grid组件一般和子组件GridItem一起使用,Grid列表中的每一个条目对应一个GridItem组件。 |
| GridItem | 一般使用循环搭配使用:ForEach(this.arr, (item: string) => {GridItem() { |
| 设置4*4的九宫数据、不可滚动 | .columnsTemplate('1fr 1fr 1fr 1fr').rowsTemplate('1fr 1fr 1fr 1fr').columnsGap(10).rowsGap(10) |
| 可滚动的数据 | GridItem的高度设置为固定值,例如100;仅设置columnsTemplate属性,不设置rowsTemplate属性,就可以实现Grid列表的滚动 |
列表滑动事件:
| 属性名称 | 描述 |
|---|---|
| onScroll | 列表滑动时触发,返回值scrollOffset为滑动偏移量,scrollState为当前滑动状态。 |
| onScrollIndex | 列表滑动时触发,返回值分别为滑动起始位置索引值与滑动结束位置索引值。 |
| onReachStart | 列表到达起始位置时触发。 |
| onReachEnd | 列表到底末尾位置时触发。 |
| onScrollStop | 列表滑动停止时触发。 |
Tabs组件:
<HarmonyOS第一课>从简单的页面开始-华为开发者学堂 (huawei.com)
管理组件状态
| 属性名称 | 描述 |
|---|---|
| @State | 组件内的状态管理:框架内部会建立数据与视图间的绑定 |
| @Prop | 从父组件单向同步状态:修饰子组件的变量,当父组件中状态变化时,该状态值也会更新至@Prop修饰的变量;对@Prop修饰的变量的修改不会影响其父组件中的状态。 |
| @Link | 与父组件双向同步状态:修饰子组件@Link变量,必须是在父组件中存在的状态变量。 |
| @Provide和@Consume | 跨组件层级双向同步状态:在跨了很多层级的组件,在父组件使用@Provide修饰,任意一个子组件用@Consume修饰即可同步 |
弹窗
<HarmonyOS第一课>构建更加丰富的页面-华为开发者学堂 (huawei.com)
WebView
registerJavaScriptProxy 使用这个注册进WebView
数据管理:
| 属性名称 | 描述 |
|---|---|
| 创建 | onCreate中创建PreferencesUtil.createFontPreferences(this.context); |
<HarmonyOS第一课>保存应用数据-华为开发者学堂 (huawei.com)
匿名内部类:
export interface CustomPromiseClass {
call(): String;
}
let customPromise: CustomPromiseClass = {
}
return xxxx(customPromise)
如果实现多个方法
let requestInterface: RequestInterface = {
onSuccess() {
},
onError() {
}
};
相关语法:
| 属性名称 | 等同于java的描述 |
|---|---|
| let ik = [] | byte[] iK = new byte[256],长度是动态的 |
| encodeURI | URLEncoder.encode() |
| new util.Base64Helper().decodeSync(resultStr) | new String(Base64.decode(resultStr, Base64.NO_WRAP)); |
传参的相关方法:
页面跳转和两个页面之间的数据传递-鸿蒙ArkTS_arkts页面跳转-CSDN博客
手机震动和view震动
HarmonyOS NEXT使用弹簧曲线实现抖动动画及手机振动效果案例_鸿蒙开发闹钟抖动的动效怎样实现?、-CSDN博客
等待xx秒
// 等待2s
await new Promise<void>(resolve => setTimeout(resolve, 2000))
undefined和null的区别
undefined表示变量未定义或未赋值的初始状态值,是一个机器式标识;
null表示一个空对象变量,本身是空对象指针,是一个程序式标识。
object API11后报错,可以使用以下
Const params : Record<string, Object> = router.getParams() as Record<string, Object>
渲染控制
渲染控制概述-渲染控制-学习ArkTS语言-基础入门 | 华为开发者联盟 (huawei.com)
Navigation路由
第6篇:Navigation系统路由表(推荐)-华为开发者论坛 | 华为开发者联盟 (huawei.com)
异步锁
ArkTSUtils.locks.AsyncLock
与Android不同的地方
- 当想使用组件占满剩下的空间时,可使用layoutWeight
- Scroll内只能使用Column等布局,不能使用RelativeContainer,不然滚动失效
- 基于上面的一点,Scroll内的Column布局可以使用RelativeContainer,但是需要height('auto')
- Scroll默认高度是100%的,所以如果有需要的话,需要给高度值