日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

鸿蒙开发学习(一)之ArkTS

發布時間:2023/11/16 windows 66 coder
生活随笔 收集整理的這篇文章主要介紹了 鸿蒙开发学习(一)之ArkTS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄
  • TypeScript語法
    • 基礎
    • module
  • ArkTS
    • 基本UI描述
      • 基本概念
    • 狀態管理
      • 頁面級變量的狀態管理
        • @State
        • @Prop
        • @Link
      • 應用級變量的狀態管理
  • 開發入門
    • 應用模型
    • 目錄
    • UIAbility
      • 生命周期
      • 啟動模式
      • 與UI的數據同步

TypeScript語法

基本語法
視頻教程

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

隨著應用越來越大,通常要將代碼拆分成多個文件,即所謂的模塊(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

基本UI描述

  • 裝飾器:用來裝飾類、結構體、方法以及變量,賦予其特殊的含義,如上述示例中 @Entry 、 @Component 、 @State 都是裝飾器。具體而言, @Component 表示這是個自定義組件; @Entry 則表示這是個入口組件; @State 表示組件中的狀態變量,這個狀態變化會引起 UI 變更。
  • 自定義組件:可復用的 UI 單元,可組合其它組件,如上述被 @Component 裝飾的 struct Hello。

ArkTS通過裝飾器@Component和@Entry裝飾struct關鍵字聲明的數據結構,構成一個自定義組件。自定義組件中提供了一個build函數,開發者需在該函數內以鏈式調用的方式進行基本的UI描述,UI描述的方法請參考UI描述規范。

基本概念

  • *struct:自定義組件可以基于struct實現,不能有繼承關系,對于struct的實例化,可以省略new。
  • *裝飾器:裝飾器給被裝飾的對象賦予某一種能力,其不僅可以裝飾類或結構體,還可以裝飾類的屬性。多個裝飾器可以疊加到目標元素上,定義在同一行中或者分開多行,推薦分開多行定義。
@Entry
@Component
struct MyComponent {
}
  • @Component:裝飾struct,結構體在裝飾后具有基于組件的能力,需要實現build方法來創建UI。
  • @Entry: 裝飾struct,組件被裝飾后作為頁面的入口,頁面加載時將被渲染顯示
  • @Preview:裝飾struct, 用@Preview裝飾的自定義組件可以在DevEco Studio的預覽器上進行實時預覽,加載頁面時,將創建并顯示@Preview裝飾的自定義組件。

狀態管理

基本概念-狀態管理-ArkTS語法(聲明式UI)-學習ArkTS語言-開發基礎知識-入門-HarmonyOS應用開發
ArkTS提供了多維度的狀態管理機制,在UI開發框架中,和UI相關聯的數據,不僅可以在組件內使用,還可以在不同組件層級間傳遞,比如父子組件之間、爺孫組件之間,也可以是全局范圍內的傳遞。另外,從數據的傳遞形式來看,可分為只讀的單向傳遞和可變更的雙向傳遞

頁面級變量的狀態管理

頁面級變量的狀態管理-狀態管理-ArkTS語法(聲明式UI)-學習ArkTS語言-開發基礎知識-入門-HarmonyOS應用開發

@State

@State裝飾的變量是組件內部的狀態數據,當這些狀態數據被修改時,將會調用所在組件的build方法進行UI刷新

  • 支持多種類型數據:支持class、number、boolean、string強類型數據的值類型和引用類型,不支持object和any
  • 內部私有:標記為@State的屬性是私有變量,只能在組件內訪問
  • 需要本地初始化:必須為所有@State變量分配初始值

@Prop

@Prop與@State有相同的語義,但初始化方式不同。@Prop裝飾的變量必須使用其父組件提供的@State變量進行初始化,允許組件內部修改@Prop變量,但變量的更改不會通知給父組件,父組件變量的更改會同步到@prop裝飾的變量,即@Prop屬于單向數據綁定
@Prop狀態數據具有以下特征:

  • 支持簡單類型:僅支持number、string、boolean等簡單數據類型;
  • 私有:僅支持組件內訪問;
  • 支持多個實例:一個組件中可以定義多個標有@Prop的屬性;
  • 創建自定義組件時將值傳遞給@Prop變量進行初始化:在創建組件的新實例時,必須初始化所有@Prop變量,不支持在組件內部進行初始化

@Link裝飾的變量可以和父組件的@State變量建立雙向數據綁定,@Link變量不能在組件內部進行初始化。

應用級變量的狀態管理

應用級變量的狀態管理-狀態管理-ArkTS語法(聲明式UI)-學習ArkTS語言-開發基礎知識-入門-HarmonyOS應用開發

開發入門

應用模型

HarmonyOS先后提供了兩種應用模型:

  • FA(Feature Ability)模型:?HarmonyOS API 7開始支持的模型,已經不再主推。FA模型開發可見FA模型開發概述。 [[FA模型]]
  • Stage模型:?HarmonyOS API 9開始新增的模型,是目前主推且會長期演進的模型。在該模型中,由于提供了AbilityStage、WindowStage等類作為應用組件和Window窗口的“舞臺”,因此稱這種應用模型為Stage模型。Stage模型開發可見Stage模型開發概述。

目錄


HAP 相當于Moudle,Entry相當于入口

  1. HAP(HarmonyOS Ability Package):這是一個包含應用程序代碼、資源文件和應用程序清單的文件。它被用作部署和安裝在鴻蒙設備上的應用程序。
  2. Entry類型的HAP:是應用的主模塊,在module.json5配置文件中的type標簽配置為“entry”類型。在同一個應用中,同一設備類型只支持一個Entry類型的HAP,通常用于實現應用的入口界面、入口圖標、主特性功能等。
  3. Ability:在鴻蒙系統中,Ability分為兩種類型,一種是Service Ability(服務能力),另一種是Page Ability(頁面能力)。前者主要處理后臺任務,如數據獲取等;后者則負責提供用戶界面并與用戶進行交互。

  • AppScope > app.json5:應用的全局配置信息。

  • entry:HarmonyOS工程模塊,編譯構建生成一個HAP包。

    • src > main > ets:用于存放ArkTS源碼。
    • src > main > ets > entryability:應用/服務的入口。
    • src > main > ets > pages:應用/服務包含的頁面。
    • src > main > resources:用于存放應用/服務所用到的資源文件,如圖形、多媒體、字符串、布局文件等。關于資源文件,詳見資源分類與訪問。
    • src > main > module.json5:Stage模型模塊配置文件。主要包含HAP包的配置信息、應用/服務在具體設備上的配置信息以及應用/服務的全局配置信息。具體的配置文件說明,詳見module.json5配置文件。
    • build-profile.json5:當前的模塊信息、編譯信息配置項,包括buildOption、targets配置等。其中targets中可配置當前運行環境,默認為HarmonyOS。
    • hvigorfile.ts:模塊級編譯構建任務腳本,開發者可以自定義相關任務和代碼實現。
  • oh_modules:用于存放三方庫依賴信息。關于原npm工程適配ohpm操作,請參考歷史工程遷移。

  • build-profile.json5:應用級配置信息,包括簽名、產品配置等。

  • hvigorfile.ts:應用級編譯構建任務腳本。

開發者也可以在右鍵點擊“pages”文件夾時,選擇“New > Page”,則無需手動配置相關頁面路由。

UIAbility

UIAbility組件生命周期-UIAbility組件-Stage模型應用組件-Stage模型開發指導-應用模型-開發 | 華為開發者聯盟
UIAbility 相當于Android Activity,一個UIAbility組件中可以通過多個頁面來實現一個功能模塊。每一個UIAbility組件實例,都對應于一個最近任務列表中的任務。

在鴻蒙操作系統(HarmonyOS)中,UIAbility和Page是兩個不同的概念,它們都屬于應用程序的組成部分,但在功能和使用上有所區別。

  1. UIAbility:UIAbility是HarmonyOS中處理用戶界面相關任務的能力(Ability),它繼承自基礎類Ability。一個UIAbility可以包含多個Page。UIability主要負責頁面導航、數據傳遞以及生命周期管理等。
  2. Page:Page是構成UIAbility的基本單元,你可以將其理解為一種界面布局。一個頁面通常代表了一個完整的用戶界面,并且可以包含許多控件(Components)。每個Page都有自己獨立的生命周期,并且在需要時可以被創建、暫停或銷毀。
    簡單來說,你可以把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實例。

與UI的數據同步

UIAbility組件與UI的數據同步-UIAbility組件-Stage模型應用組件-Stage模型開發指導-應用模型-開發 | 華為開發者聯盟

基于HarmonyOS的應用模型,可以通過以下兩種方式來實現UIAbility組件與UI之間的數據同步。

  1. EventHub:基于發布訂閱模式來實現,事件需要先訂閱后發布,訂閱者收到消息后進行處理。
  2. globalThis:ArkTS引擎實例內部的一個全局對象,在ArkTS引擎實例內部都能訪問。

總結

以上是生活随笔為你收集整理的鸿蒙开发学习(一)之ArkTS的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。