ArkTS是HarmonyOS優選的主力應用開發語言。ArkTS圍繞應用開發在TypeScript(簡稱TS,Microsoft)生態基礎上做了進一步擴充套件,繼承了TS的所有特性,是TS的超集。因此,在學習ArkTS語言之前,建議開發者具備TS語言開發能力。
let 、const、var
作用域: var
是函數作用域,這意味著如果你在函數內部使用 var
宣告一個變數,那麼這個變數在整個函數內部都可以存取。而 let
是塊級作用域,只能在宣告它的塊或子塊中存取。
使用 let 可以減少由於程式設計錯誤或誤解引起的bug數量,並且強制執行更強大、更易理解、更可預測的程式設計模式。
TypeScript裡使用 string表示文字資料型別, 可以使用雙引號( ")或單引號(')表示字串。
let list: number[] = [1, 2, 3];
let list: Array<number> = [1, 2, 3];
//元組
let x: [string, number];
x = ['hello', 10]; // OK
x = [10, 'hello']; // Error
enum Color {Red, Green, Blue};
let c: Color = Color.Green;
let notSure: unknown = 4;
notSure = 'maybe a string instead';
notSure = false;
function test(): void {
console.log('This is function is void');
}
可選引數
function buildName(firstName: string, lastName?: string) {
if (lastName)
return firstName + ' ' + lastName;
else
return firstName;
}
let result1 = buildName('Bob');
let result2 = buildName('Bob', 'Adams');
箭頭函數
ES6版本的TypeScript提供了一個箭頭函數,它是定義匿名函數的簡寫語法,用於函數表示式,它省略了function關鍵字。箭頭函數的定義如下,其函數是一個語句塊:
( [param1, parma2,…param n] )=> {
// 程式碼塊
}
其中,括號內是函數的入參,可以有0到多個引數,箭頭後是函數的程式碼塊。我們可以將這個箭頭函數賦值給一個變數,如下所示:
let arrowFun = ( [param1, parma2,…param n] )=> {
// 程式碼塊
}
類:和Java類似,有new、extends、this、public、private、protected
class Person {
private name: string
private age: number
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
public getPersonInfo(): string {
return `My name is ${this.name} and age is ${this.age}`;
}
}
for..of和for..in均可迭代一個列表,但是用於迭代的值卻不同:for..in迭代的是物件的鍵,而for..of則迭代的是物件的值。
let list = [4, 5, 6];
for (let i in list) {
console.log(i); // "0", "1", "2",
}
for (let i of list) {
console.log(i); // "4", "5", "6"
}
隨著應用越來越大,通常要將程式碼拆分成多個檔案,即所謂的模組(module)
兩個模組之間的關係是通過在檔案級別上使用 import 和 export 建立的。模組裡面的變數、函數和類等在模組外部是不可見的,除非明確地使用 export 匯出它們。類似地,我們必須通過 import 匯入其他模組匯出的變數、函數、類等。
export class NewsData {
title: string;
content: string;
imagesUrl: Array<NewsFile>;
source: string;
constructor(title: string, content: string, imagesUrl: Array<NewsFile>, source: string) {
this.title = title;
this.content = content;
this.imagesUrl = imagesUrl;
this.source = source;
}
}
import { NewsData } from '../common/bean/NewsData';
ArkTS通過裝飾器@Component和@Entry裝飾struct關鍵字宣告的資料結構,構成一個自定義元件。自定義元件中提供了一個build函數,開發者需在該函數內以鏈式呼叫的方式進行基本的UI描述,UI描述的方法請參考UI描述規範。
@Entry
@Component
struct MyComponent {
}
基本概念-狀態管理-ArkTS語法(宣告式UI)-學習ArkTS語言-開發基礎知識-入門-HarmonyOS應用開發
ArkTS提供了多維度的狀態管理機制,在UI開發框架中,和UI相關聯的資料,不僅可以在元件內使用,還可以在不同元件層級間傳遞,比如父子元件之間、爺孫元件之間,也可以是全域性範圍內的傳遞。另外,從資料的傳遞形式來看,可分為唯讀的單向傳遞和可變更的雙向傳遞
頁面級變數的狀態管理-狀態管理-ArkTS語法(宣告式UI)-學習ArkTS語言-開發基礎知識-入門-HarmonyOS應用開發
@State裝飾的變數是元件內部的狀態資料,當這些狀態資料被修改時,將會呼叫所在元件的build方法進行UI重新整理。
@Prop與@State有相同的語意,但初始化方式不同。@Prop裝飾的變數必須使用其父元件提供的@State變數進行初始化,允許元件內部修改@Prop變數,但變數的更改不會通知給父元件,父元件變數的更改會同步到@prop裝飾的變數,即@Prop屬於單向資料繫結。
@Prop狀態資料具有以下特徵:
@Link裝飾的變數可以和父元件的@State變數建立雙向資料繫結,@Link變數不能在元件內部進行初始化。
應用級變數的狀態管理-狀態管理-ArkTS語法(宣告式UI)-學習ArkTS語言-開發基礎知識-入門-HarmonyOS應用開發
HarmonyOS先後提供了兩種應用模型:
HAP 相當於Moudle,Entry相當於入口
AppScope > app.json5:應用的全域性設定資訊。
entry:HarmonyOS工程模組,編譯構建生成一個HAP包。
oh_modules:用於存放三方庫依賴資訊。關於原npm工程適配ohpm操作,請參考歷史工程遷移。
build-profile.json5:應用級設定資訊,包括簽名、產品設定等。
hvigorfile.ts:應用級編譯構建任務指令碼。
開發者也可以在右鍵點選「pages」資料夾時,選擇「New > Page」,則無需手動設定相關頁面路由。
UIAbility元件生命週期-UIAbility元件-Stage模型應用元件-Stage模型開發指導-應用模型-開發 | 華為開發者聯盟
UIAbility 相當於Android Activity,一個UIAbility元件中可以通過多個頁面來實現一個功能模組。每一個UIAbility元件範例,都對應於一個最近任務列表中的任務。
在鴻蒙作業系統(HarmonyOS)中,UIAbility和Page是兩個不同的概念,它們都屬於應用程式的組成部分,但在功能和使用上有所區別。
WindowStageCreate和WindowStageDestroy狀態
UIAbility範例建立完成之後,在進入Foreground之前,系統會建立一個WindowStage。WindowStage建立完成後會進入onWindowStageCreate()回撥,可以在該回撥中設定UI介面載入、設定WindowStage的事件訂閱。
import UIAbility from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window';
export default class EntryAbility extends UIAbility {
onWindowStageCreate(windowStage: Window.WindowStage) {
// 設定WindowStage的事件訂閱(獲焦/失焦、可見/不可見)
// 設定UI介面載入
windowStage.loadContent('pages/Index', (err, data) => {
// ...
});
}
}
singleton:單範例模式,也是預設情況下的啟動模式。在最近任務列表中只存在一個該型別的UIAbility範例。
standard:標準範例模式,每次呼叫startAbility()方法時,都會在應用程序中建立一個新的該型別UIAbility範例。即在最近任務列表中可以看到有多個該型別的UIAbility範例。
UIAbility元件與UI的資料同步-UIAbility元件-Stage模型應用元件-Stage模型開發指導-應用模型-開發 | 華為開發者聯盟
基於HarmonyOS的應用模型,可以通過以下兩種方式來實現UIAbility元件與UI之間的資料同步。