接口文档:
Rest参数: 可变参数
function sum(...nums:number[]) {
let res = 0;
for(let n of nums) {
res += n;
}
return res;
}
sum(1)
sum(1,2)
sum(1,2,3)
泛型:
泛型类型允许创建的代码在各种类型上运行
/***
* 泛型类
***/
class CustomStack<T> {
public push(e:T) {
}
}
let c = new CustomStack<string>();
c.push('hello')
let age = new CustomStack<number>();
age .push(123)
泛型函数:
function add<T>(x: T[]) {
return x[x.length - 1]
}
add<number>([10,20,30])
add<string>(['iwen','jack'])
// 默认推倒:根据传递的参数推倒类型
add([10,20,30])
ArkTS语言-空安全:
默认情况下,ArkTS中的所有类型都是不可为空的,因此类型的值不能为空。
这类似于TypeScript的严格空值检查模式(strictNullChecks),但规则更严格。
let x: number = null; // 编译时错误
let x: number | null = null; // 联合类型
x = 1; // ok
x = null; // ok
非空断言运算符:
class A {
value:number = 0
}
function foo(a : A | null) {
//a.valuev
a!.value; //!. a不为空时才调用value
}
// 空值合并运算符
空值合并二元运算符??用于检查左侧表达式的求值是否等于null或者underfined,如果是,则表达式的结果为右侧表达式,否则为左侧表达式。
换句话说 , a??b等价于三元运算符(a!=null && a!=underfined)? a : b
class Person{
nick: string |null =null;
getNick() : string {
return this.nick ?? ''
}
}
ArkTS语言模块
程序可划分为多组编译单元或模块。
每个模块都有其自己的作用域。即在模块中创建的任何声明(变量、函数、类等)在该模块之外都不可见,除非它们被显式导出。
与此相对,从另一个模块导出的变量、函数、类、接口等必须首先导入到模块中。
导出:
可以使用关键字export导出顶层的声明。
未导出的声明名称被视为私有名称,只能在声明该名称的模块中使用。
export function hello() {
return 'Hello ArkTS'
}
export default function hello() {
return 'Hello ArkTS'
}
导入:
import { hello } from './文件名'
import default from './文件名' // 不用加 { }
通过导入Kit方式使用开放能力有三种方式:
方式一:导入Kit下单个模块的接口能力。例如:
import { UIAbility } from '@kit.AbilityKit';
方式二:导入Kit下多个模块的接口能力。例如:
import { UIAbility, Ability, Context } from '@kit.AbilityKit';
方式三:导入Kit下包含的所有模块的接口能力。例如:
import * as module from '@kit.AbilityKit'; // module 就是起的别名
生命周期:
组件和页面在创建、显示、销毁的这一整个过程中,会自动执行一系列的【生命周期钩子】
其实就是一系列的【函数】,让开发者有机会在特定的阶段运行自己的代码
区分页面和组件: @Entry
@Entry:页面性质的组件,页面的生命周期钩子比较多。
组件对应的2个钩子:
aboutToAppear:创建组件实例后执行,可以修改状态变量
aboutToDisappear:组件实例销毁前执行,不允许修改状态变量
onPageShow:页面每次显示触发(路由过程、应用进入前后台)
onPageHide:页面每次隐藏触发(路由过程、应用进入前后台)
onBackPress:点击返回出发(return true :阻止返回键默认返回效果,自己手写返回的代码,将来定制返回的逻辑。 router.back())
仅@Entry修改的页面组件生效。
aboutToAppear --> onPageShow -->onPageHide-->aboutToDisappear
由外及内的 先页面再组件
Stage模型:
应用模型是系统为开发者提供的应用程序所需能力的抽象提炼,它提供了应用程序必须的组件和运行机制。
简而言之:应用模型就是应用的施工图纸,它规范化了:程序运行流程、项目结构、文件功能等。。。
了解应用模型之后,就可以知道:
1、实现某个功能需要在哪个文件编码
2、如何感知应用的状态变化(启动、关闭、切后台)
3、如何调整项目配置
。。。
随着系统的演进发展,先后提供了两种应用模型:
1、FA模型:从API7开始支持的模型,已经不再主推
2、Stage模型:从API9开始新增的模型,是目前主推且会长期演进的模型
应用图标和描述信息,如下:
应用桌面图标和描述信息,如下:
Stage模型-UIAblity组件
onWindowStageCreate:当窗口舞台创建的时候的钩子
一个Ablity可以有多个页面,之间可以互相跳转
在模块右击,可新建Ability。
在项目右击,可新建模块。Ability可以理解成窗口,Page相当于界面。
备注:
https://gitee.com/huyi612/harmonyos-lessons/blob/master/entry/src/main/ets/views/task/TaskList.ets
https://gitee.com/huyi612/harmonyos-lessons/blob/master/entry/src/main/ets/pages/AnimationPage2.ets