鴻蒙開發——3.ArkTS聲明式開發:構建第一個ArkTS應用

鴻蒙開發——3.ArkTS聲明式開發:構建第一個ArkTS應用

  • 一、創建ArkTS工程
  • 二、ArkTS工程目錄結構(Stage模型)
  • 三、構建第一個頁面
  • 四、構建第二個頁面
  • 五、實現頁面之間的跳轉
  • 六、模擬器運行

一、創建ArkTS工程

1、若首次打開DevEco Studio,請點擊Create Project創建工程。如果已經打開了一個工程,請在菜單欄選擇File > New > Create Project來創建一個新工程。
2、選擇Application應用開發(本文以應用開發為例,Atomic Service對應為元服務開發),選擇模板Empty Ability,點擊Next進行下一步配置。
在這里插入圖片描述
3、進入配置工程界面,配置項目名稱、保存位置等,Compatible SDK表示兼容的最低API Version,此處以選擇5.0.4(16)為例,其他參數保持默認設置即可,點擊Finish,工具會自動生成示例代碼和相關資源,等待工程創建完成。
在這里插入圖片描述

二、ArkTS工程目錄結構(Stage模型)

在這里插入圖片描述

  • AppScope > app.json5:應用的全局配置信息,詳見app.json5配置文件。

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

    • src > main > ets:用于存放ArkTS源碼。
    • src > main > ets > entryability:應用/服務的入口。
    • src > main > ets > entrybackupability:應用提供擴展的備份恢復能力。
    • src > main > ets > pages:應用/服務包含的頁面。
    • src > main > resources:用于存放應用/服務所用到的資源文件,如圖形、多媒體、字符串、布局文件等。關于資源文件,詳見資源分類與訪問。
    • src > main > module.json5:模塊配置文件。主要包含HAP包的配置信息、應用/服務在具體設備上的配置信息以及應用/服務的全局配置信息。具體的配置文件說明,詳見module.json5配置文件。
    • build-profile.json5:當前的模塊信息 、編譯信息配置項,包括buildOption、targets配置等。
    • hvigorfile.ts:模塊級編譯構建任務腳本。
    • obfuscation-rules.txt:混淆規則文件。混淆開啟后,在使用Release模式進行編譯時,會對代碼進行編譯、混淆及壓縮處理,保護代碼資產。詳見開啟代碼混淆。
    • oh-package.json5:用來描述包名、版本、入口文件(類型聲明文件)和依賴項等信息。
  • oh_modules:用于存放三方庫依賴信息。

  • build-profile.json5:工程級配置信息,包括簽名signingConfigs、產品配置products等。其中 products中可配置當前運行環境,默認為HarmonyOS。

  • hvigorfile.ts:工程級編譯構建任務腳本。

  • oh-package.json5:主要用來描述全局配置,如:依賴覆蓋(overrides)、依賴關系重寫(overrideDependencyMap)和參數化配置(parameterFile)等。

三、構建第一個頁面

1、工程同步完成后,在Project窗口,點擊entry > src > main > ets > pages,打開Index.ets文件,進行頁面的編寫,編輯器會默認生成代碼基本骨架:

@Entry
@Component
struct Index {@State message: string = 'Hello World';build() {RelativeContainer() {Text(this.message).id('HelloWorld').fontSize($r('app.float.page_text_font_size')).fontWeight(FontWeight.Bold).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }}).onClick(() => {this.message = 'Welcome';})}.height('100%').width('100%')}
}

2、在已有頁面代碼基礎之上,添加一個Button組件,用于用戶點擊后跳轉至第二個頁面中:

@Entry
@Component
struct Index {@State message: string = 'first page';build() {RelativeContainer() {Text(this.message).id('HelloWorld').fontSize($r('app.float.page_text_font_size')).fontWeight(FontWeight.Bold).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }}).onClick(() => {this.message = 'Welcome';})Button(){Text('Next').fontSize(30).fontWeight(FontWeight.Bold)}.type(ButtonType.Capsule).margin({top: 100}).backgroundColor('#0D9FFB').width('40%').height('5%').fontColor(Color.White).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }})}.height('100%').width('100%')}
}

四、構建第二個頁面

1、創建第二個頁面。
新建第二個頁面文件。在Project窗口,打開entry > src > main > ets,右鍵點擊pages文件夾,選擇New > ArkTS File,命名為second,點擊回車鍵。可以看到文件目錄結構如下:
在這里插入圖片描述
在這里插入圖片描述
2、配置第二個頁面的路由。在Project窗口,打開entry > src > main > resources > base > profile,在main_pages.json文件中的"src"下配置第二個頁面的路由"pages/second"。示例如下:

{"src": ["pages/Index","pages/second"]
}

在這里插入圖片描述

3、添加文本及按鈕。
參照第一個頁面,在第二個頁面添加Text組件、Button組件等,并設置其樣式。second.ets文件的示例如下:

@Entry
@Component
struct second {@State message: string = 'second page';build() {RelativeContainer() {Text(this.message).id('HelloWorld').fontSize($r('app.float.page_text_font_size')).fontWeight(FontWeight.Bold).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }}).onClick(() => {this.message = 'Welcome';})Button(){Text('back').fontSize(30).fontWeight(FontWeight.Bold)}.type(ButtonType.Capsule).margin({top: 100}).backgroundColor('#0D9FFB').width('40%').height('5%').fontColor(Color.White).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }})}.height('100%').width('100%')}
}

五、實現頁面之間的跳轉

頁面間的導航可以通過頁面路由router來實現。頁面路由router根據頁面url找到目標頁面,從而實現跳轉。使用頁面路由請導入router模塊。

如果需要實現更好的轉場動效,推薦使用Navigation。

1、第一個頁面跳轉到第二個頁面。
在第一個頁面中,跳轉按鈕綁定onClick事件,點擊按鈕時跳轉到第二頁。Index.ets文件的示例如下:

// 導入頁面路由模塊
import { router } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';
@Entry
@Component
struct Index {@State message: string = 'first page';build() {RelativeContainer() {Text(this.message).id('HelloWorld').fontSize($r('app.float.page_text_font_size')).fontWeight(FontWeight.Bold).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }}).onClick(() => {this.message = 'Welcome';})Button(){Text('Next').fontSize(30).fontWeight(FontWeight.Bold)}.type(ButtonType.Capsule).margin({top: 100}).backgroundColor('#0D9FFB').width('40%').height('5%').fontColor(Color.White).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }}).onClick(()=>{console.info(`Succeeded in clicking the 'next' button.`)router.pushUrl({url:'pages/second'}).then(()=>{console.info('succeeded in jumping to the second page.')}).catch((err:BusinessError)=>{console.error(`Failed to jump to the second page. Code is ${err.code},message is ${err.message}`)})})}.height('100%').width('100%')}
}

2、第二個頁面返回到第一個頁面。
在第二個頁面中,返回按鈕綁定onClick事件,點擊按鈕時返回到第一頁。Second.ets文件的示例如下:

// 導入頁面路由模塊
import { router } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';@Entry
@Component
struct second {@State message: string = 'second page';build() {RelativeContainer() {Text(this.message).id('HelloWorld').fontSize($r('app.float.page_text_font_size')).fontWeight(FontWeight.Bold).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }}).onClick(() => {this.message = 'Welcome';})Button(){Text('back').fontSize(30).fontWeight(FontWeight.Bold)}.type(ButtonType.Capsule).margin({top: 100}).backgroundColor('#0D9FFB').width('40%').height('5%').fontColor(Color.White).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }}).onClick(()=>{console.info(`Succeeded in clicking the 'next' button`)try{router.back()console.info(`Succeeded in jumping to the second page.`)}catch(err){let code=(err as BusinessError).code;let message=(err as BusinessError).message;console.error(`Failed to return to the first page. Code is ${code}, message is ${message}`)}})}.height('100%').width('100%')}
}

六、模擬器運行

在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79807.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79807.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79807.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言初階:數組

目錄 0.數組要講的知識點 1.一維數組的創建和初始化 1.1 數組的創建: 1.2數組實例: 1.3 數組的初識化: 例子: 2.一維數組的使用 例子: 總結: 3.一維數組在內存中的存儲 4.二維數組的創建和初始化 4.…

UE5 Daz頭發轉Blender曲線再導出ABC成為Groom

先安裝Daz to Blender Import插件 【神器】 --DAZ一鍵導入blender插件的詳細安裝和使用,自帶骨骼綁定和控制器,多姿勢動畫,Importer橋接插件_嗶哩嗶哩_bilibili 然后安裝DAZHairConverter插件 一分鐘將DAZ頭發轉化成Blender粒子毛發_嗶哩嗶…

淺聊find_package命令的搜索模式(Search Modes)

背景 find_package應該算是我們使用最多的cmake命令了。但是它是如何找到上游庫的.cmake文件的? 根據官方文檔,整理下find_package涉及到的搜索模式。 搜索模式 find_package涉及到的搜索模式有兩種:模塊模式(Module mode)和配置模式(Conf…

什么是先驗?(CVPR25)Detail-Preserving Latent Diffusion for Stable Shadow Removal論文閱讀

文章目錄 先驗(Prior)是什么?1. 先驗的數學定義2. 先驗在深度生成模型中的角色3. 為什么需要先驗?4. 先驗的常見類型5. 如何選擇或構造先驗?6. 小結 先驗(Prior)是什么? 在概率統計…

【視覺基礎模型-SAM系列-2】SAM2: Segment Anything in Images and Videos

論文鏈接:SAM 2: Segment Anything in Images and Videos 代碼鏈接:https://github.com/facebookresearch/sam2?tabreadme-ov-file 作者:Nikhila Ravi, Valentin Gabeur, Yuan-Ting Hu, Ronghang Hu, Chaitanya Ryali, Tengyu Ma, Haitham…

OpenShift AI - 模型注冊管理

《OpenShift / RHEL / DevSecOps 匯總目錄》 說明:本文已經在 OpenShift 4.18 OpenShift AI 2.19 的環境中驗證 文章目錄 啟用模型注冊管理功能安裝管理數據庫啟用模型注冊功能 注冊模型部署模型歸檔模型歸檔模型和模型版本恢復歸檔模型 模型注冊表訪問權限管理參考…

【背包dp----01背包】例題三------(標準的01背包+變種01背包1【恰好裝滿背包體積 產生的 最大價值】)

【模板】01背包 題目鏈接 題目描述 : 輸入描述: 輸出描述: 示例1 輸入 3 5 2 10 4 5 1 4輸出 14 9說明 裝第一個和第三個物品時總價值最大,但是裝第二個和第三個物品可以使得背包恰好裝滿且總價值最大。 示例2 輸入 3 8 12 6 11 8 6 8輸出 8 0說明 裝第三個物…

Node.js 的 child_process 模塊詳解

Node.js 的 child_process 模塊提供了創建子進程的能力,使 Node.js 應用能夠執行系統命令、運行其他程序或腳本。這個模塊非常強大,可以幫助我們實現很多復雜的功能。 1. exec - 執行 shell 命令 exec 方法用于執行 shell 命令,并緩沖任何產生的輸出。 特點 創建 shell 來…

進程與線程詳細介紹

目錄 一 進程概念 二 進程的組成 2.1 PCB 2.2 數據段 2.3 程序段 三 進程的五大特點 四 進程的創建與銷毀 五 線程概念 六 線程特征 七 進程與線程的區別與聯系 區別 聯系 一 進程概念 進程是程序的一次執行過程,是操作系統進行資源分配和調度的基本單位…

如何在服務器后臺運行Python腳本,并配置虛擬環境與GPU支持

使用Conda虛擬環境在服務器后臺運行Python腳本,并檢查GPU分配 在服務器開發環境中,我們需要確保Python腳本運行在指定的Conda虛擬環境中,并且確認是否正確分配了GPU資源。本文將通過一個完整的start.sh腳本,完成以下功能&#xff…

前端取經路——工程化渡劫:八戒的構建之道

大家好,我是老十三,一名前端開發工程師。前端工程化就像八戒的釘耙,看似簡單卻能降妖除魔。在本文中,我將帶你探索前端工程化的九大難題,從模塊化組織到CI/CD流程,從代碼規范到自動化測試,揭示這些工具背后的核心原理。無論你是初學者還是資深工程師,這些構建之道都能幫…

Ubuntu 安裝 Keepalived

Keepalived 是什么 Keepalived 是一個用于實現高可用性(High Availability, HA)的服務,是一款基于 VRRP 協議的高可用軟件,常用于主備切換和虛擬IP漂移,在服務故障時自動實現故障轉移。 Keepalived 的核心功能 功能說…

DHCP理解

文章目錄 DHCP理解DHCP的核心作用DHCP默認端口DHCP的工作原理(4個步驟)圖示說明(含中繼代理)DHCP Discover(客戶端發現階段)DHCP Offer(服務器提供階段)DHCP Request(客戶…

云計算-容器云-部署CICD-jenkins連接gitlab

安裝 Jenkins 將Jenkins部署到default命名空間下。要求完成離線插件的安裝,設置Jenkins的登錄信息和授權策略。 上傳BlueOcean.tar.gz包 [root@k8s-master-node1 ~]#tar -zxvf BlueOcean.tar.gz [root@k8s-master-node1 ~]#cd BlueOcean/images/ vim /etc/docker/daemon.json…

AI 大模型新浪潮:從 DeepSeek-Prover 到 Qwen3,再到 DeepSeek-R2,邁向自動推理的新時代20250507

🧠 AI 大模型新浪潮:從 DeepSeek-Prover 到 Qwen3,再到 DeepSeek-R2,邁向自動推理的新時代 🚀 引言:大模型,不止是語言處理器,而是思維建構者 在 2025 年春天,我們見證了…

觀察者模式(Observer Pattern)詳解

文章目錄 1. 什么是觀察者模式?2. 為什么需要觀察者模式?3. 觀察者模式的核心概念4. 觀察者模式的結構5. 觀察者模式的基本實現簡單的氣象站示例6. 觀察者模式的進階實現推模型 vs 拉模型6.1 推模型(Push Model)6.2 拉模型(Pull Model)7. 觀察者模式的復雜實現7.1 在線商…

前端代碼規范詳細配置

以下是現代前端項目的完整代碼規范配置方案,涵蓋主流技術棧和自動化工具鏈配置: 一、基礎工程配置 1. 項目結構規范 project/ ├── src/ │ ├── assets/ # 靜態資源 │ ├── components/ # 通用組件 │ ├── layouts/ …

Missashe考研日記-day34

Missashe考研日記-day34 1 專業課408 學習時間:3h學習內容: 今天是學習I/O管理第二小節的內容,聽了課也做了題,這是操作系統倒數第二節知識了,還差最后一節就完結了。知識點回顧: 1.I/O核心子系統&#x…

Milvus 向量數據庫詳解與實踐指南

一、Milvus 核心介紹 1. 什么是 Milvus? Milvus 是一款開源、高性能、可擴展的向量數據庫,專門為海量向量數據的存儲、索引和檢索而設計。它支持近似最近鄰搜索(ANN),適用于圖像檢索、自然語言處理(NLP&am…

算力經濟模型研究:從云計算定價到去中心化算力市場設計

引言:算力商品化的雙重革命 在H800 GPU集群的算力供給能力突破2.3 EFLOPS的今天,算力定價機制正經歷從"資源租賃"到"動態市場"的范式轉變。傳統云計算定價模型(如AWS按需實例)的靜態價格機制已難以適應大模型…