中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

響應(yīng)式制作網(wǎng)站建設(shè)線上教育培訓(xùn)機(jī)構(gòu)十大排名

響應(yīng)式制作網(wǎng)站建設(shè),線上教育培訓(xùn)機(jī)構(gòu)十大排名,環(huán)球影城可以寄存東西嗎,美麗寮步網(wǎng)站建設(shè)價(jià)錢HarmonyOS(二) 初識(shí)ArkTS開(kāi)發(fā)語(yǔ)言(下)之TypeScript入門 聲明式UI基本概念 應(yīng)用界面是由一個(gè)個(gè)頁(yè)面組成,ArkTS是由ArkUI框架提供,用于以聲明式開(kāi)發(fā)范式開(kāi)發(fā)界面的語(yǔ)言。 聲明式UI構(gòu)建頁(yè)面的過(guò)程&#xff…

HarmonyOS(二) 初識(shí)ArkTS開(kāi)發(fā)語(yǔ)言(下)之TypeScript入門

聲明式UI基本概念

應(yīng)用界面是由一個(gè)個(gè)頁(yè)面組成,ArkTS是由ArkUI框架提供,用于以聲明式開(kāi)發(fā)范式開(kāi)發(fā)界面的語(yǔ)言。

聲明式UI構(gòu)建頁(yè)面的過(guò)程,其實(shí)是組合組件的過(guò)程,聲明式UI的思想,主要體現(xiàn)在兩個(gè)方面:

  • 描述UI的呈現(xiàn)結(jié)果,而不關(guān)心過(guò)程
  • 狀態(tài)驅(qū)動(dòng)視圖更新

類似蘋果的SwiftUI中通過(guò)組合視圖View,安卓Jetpack Compose中通過(guò)組合@Composable函數(shù),ArkUI作為HarmonyOS應(yīng)用開(kāi)發(fā)的UI開(kāi)發(fā)框架,其使用ArkTS語(yǔ)言構(gòu)建自定義組件,通過(guò)組合自定義組件完成頁(yè)面的構(gòu)建。

自定義組件的組成

ArkTS通過(guò)struct聲明組件名,并通過(guò)@Component和@Entry裝飾器,來(lái)構(gòu)成一個(gè)自定義組件。

使用@Entry和@Component裝飾的自定義組件作為頁(yè)面的入口,會(huì)在頁(yè)面加載時(shí)首先進(jìn)行渲染。

@Entry
@Component
struct ToDoList {...}

例如ToDoList組件對(duì)應(yīng)如下整個(gè)代辦頁(yè)面。

圖1 ToDoList待辦列表
點(diǎn)擊放大

使用@Component裝飾的自定義組件,如ToDoItem這個(gè)自定義組件則對(duì)應(yīng)如下內(nèi)容,作為頁(yè)面的組成部分。

@Component
struct ToDoItem {...}

圖2 ToDoItem
點(diǎn)擊放大

在自定義組件內(nèi)需要使用build方法來(lái)進(jìn)行UI描述。

@Entry
@Componentstruct ToDoList...build() {...} 
}

build方法內(nèi)可以容納內(nèi)置組件和其他自定義組件,如Column和Text都是內(nèi)置組件,由ArkUI框架提供,ToDoItem為自定義組件,需要開(kāi)發(fā)者使用ArkTS自行聲明。

@Entry
@Component
struct ToDoList {...build() {Column(...) {Text(...)...ForEach(...{TodoItem(...)},...)}...}
}

配置屬性與布局

自定義組件的組成使用基礎(chǔ)組件和容器組件等內(nèi)置組件進(jìn)行組合。但有時(shí)內(nèi)置組件的樣式并不能滿足我們的需求,ArkTS提供了屬性方法用于描述界面的樣式。屬性方法支持以下使用方式:

  • 常量傳遞

    例如使用fontSize(50)來(lái)配置字體大小。

    Text('Hello World').fontSize(50)
    
  • 變量傳遞

    在組件內(nèi)定義了相應(yīng)的變量后,例如組件內(nèi)部成員變量size,就可以使用this.size方式使用該變量。

    Text('Hello World').fontSize(this.size)
    
  • 鏈?zhǔn)秸{(diào)用

    在配置多個(gè)屬性時(shí),ArkTS提供了鏈?zhǔn)秸{(diào)用的方式,通過(guò)’.'方式連續(xù)配置。

    Text('Hello World').fontSize(this.size).width(100).height(100)
    
  • 表達(dá)式傳遞

    屬性中還可以傳入普通表達(dá)式以及三目運(yùn)算表達(dá)式。

    Text('Hello World').fontSize(this.size).width(this.count + 100).height(this.count % 2 === 0 ? 100 : 200)
    
  • 內(nèi)置枚舉類型

    除此之外,ArkTS中還提供了內(nèi)置枚舉類型,如Color,FontWeight等,例如設(shè)置fontColor改變字體顏色為紅色,并私有fontWeight為加粗。

    Text('Hello World').fontSize(this.size).width(this.count + 100).height(this.count % 2 === 0 ? 100 : 200).fontColor(Color.Red).fontWeight(FontWeight.Bold)
    

對(duì)于有多種組件需要進(jìn)行組合時(shí),容器組件則是描述了這些組件應(yīng)該如何排列的結(jié)果。

ArkUI中的布局容器有很多種,在不同的適用場(chǎng)合選擇不同的布局容器實(shí)現(xiàn),ArkTS使用容器組件采用花括號(hào)語(yǔ)法,內(nèi)部放置UI描述。

點(diǎn)擊放大

這里我們將介紹最基礎(chǔ)的兩個(gè)布局——列布局和行布局。

對(duì)于如下每一項(xiàng)的布局,兩個(gè)元素為橫向排列,選擇Row布局

圖3 Row布局
點(diǎn)擊放大

Row() {Image($r('app.media.ic_default'))...Text(this.content) ...
}
...

類似下圖所示的布局,整體都是從上往下縱向排列,適用的布局方式是Column列布局。

圖4 Column布局
點(diǎn)擊放大

Column() {Text($r('app.string.page_title'))...ForEach(this.totalTasks,(item) => {TodoItem({content:item})},...)}

改變組件狀態(tài)

實(shí)際開(kāi)發(fā)中由于交互,頁(yè)面的內(nèi)容可能需要產(chǎn)生變化,以每一個(gè)ToDoItem為例,其在完成時(shí)的狀態(tài)與未完成時(shí)的展示效果是不一樣的。

圖5 不同狀態(tài)的視圖
點(diǎn)擊放大

聲明式UI的特點(diǎn)就是UI是隨數(shù)據(jù)更改而自動(dòng)刷新的,我們這里定義了一個(gè)類型為boolean的變量isComplete,其被@State裝飾后,框架內(nèi)建立了數(shù)據(jù)和視圖之間的綁定,其值的改變影響UI的顯示。

@State isComplete : boolean = false;

圖6 @State裝飾器的作用
點(diǎn)擊放大

用圓圈和對(duì)勾這樣兩個(gè)圖片,分別來(lái)表示該項(xiàng)是否完成,這部分涉及到內(nèi)容的切換,需要使用條件渲染if / else語(yǔ)法來(lái)進(jìn)行組件的顯示與消失,當(dāng)判斷條件為真時(shí),組件為已完成的狀態(tài),反之則為未完成。

if (this.isComplete) {Image($r('app.media.ic_ok')).objectFit(ImageFit.Contain).width($r('app.float.checkbox_width')).height($r('app.float.checkbox_width')).margin($r('app.float.checkbox_margin'))
} else {Image($r('app.media.ic_default')).objectFit(ImageFit.Contain).width($r('app.float.checkbox_width')).height($r('app.float.checkbox_width')).margin($r('app.float.checkbox_margin'))
}

由于兩個(gè)Image的實(shí)現(xiàn)具有大量重復(fù)代碼,ArkTS提供了@Builder裝飾器,來(lái)修飾一個(gè)函數(shù),快速生成布局內(nèi)容,從而可以避免重復(fù)的UI描述內(nèi)容。這里使用@Bulider聲明了一個(gè)labelIcon的函數(shù),參數(shù)為url,對(duì)應(yīng)要傳給Image的圖片路徑。

@Builder labelIcon(url) {Image(url).objectFit(ImageFit.Contain).width($r('app.float.checkbox_width')).height($r('app.float.checkbox_width')).margin($r('app.float.checkbox_margin'))
}

使用時(shí)只需要使用this關(guān)鍵字訪問(wèn)@Builder裝飾的函數(shù)名,即可快速創(chuàng)建布局。

if (this.isComplete) {this.labelIcon($r('app.media.ic_ok'))
} else {this.labelIcon($r('app.media.ic_default'))
}

為了讓待辦項(xiàng)帶給用戶的體驗(yàn)更符合已完成的效果,給內(nèi)容的字體也增加了相應(yīng)的樣式變化,這里使用了三目運(yùn)算符來(lái)根據(jù)狀態(tài)變化修改其透明度和文字樣式,如opacity是控制透明度,decoration是文字是否有劃線。通過(guò)isComplete的值來(lái)控制其變化。

Text(this.content)....opacity(this.isComplete ? CommonConstants.OPACITY_COMPLETED : CommonConstants.OPACITY_DEFAULT).decoration({ type: this.isComplete ? TextDecorationType.LineThrough : TextDecorationType.None })

最后,為了實(shí)現(xiàn)與用戶交互的效果,在組件上添加了onClick點(diǎn)擊事件,當(dāng)用戶點(diǎn)擊該待辦項(xiàng)時(shí),數(shù)據(jù)isComplete的更改就能夠觸發(fā)UI的更新。

@Component
struct ToDoItem {@State isComplete : boolean = false;@Builder labelIcon(icon) {...}...build() {Row() {if (this.isComplete) {this.labelIcon($r('app.media.ic_ok'))} else {this.labelIcon($r('app.media.ic_default'))}... }....onClick(() => {this.isComplete= !this.isComplete;})}
}

循環(huán)渲染列表數(shù)據(jù)

剛剛只是完成了一個(gè)ToDoItem組件的開(kāi)發(fā),當(dāng)我們有多條待辦數(shù)據(jù)需要顯示在頁(yè)面時(shí),就需要使用到ForEach循環(huán)渲染語(yǔ)法。

例如這里我們有五條待辦數(shù)據(jù)需要展示在頁(yè)面上。

total_Tasks:Array<string> = ['早起晨練','準(zhǔn)備早餐','閱讀名著','學(xué)習(xí)ArkTS','看劇放松'
]

ForEach基本使用中,只需要了解要渲染的數(shù)據(jù)以及要生成的UI內(nèi)容兩個(gè)部分,例如這里要渲染的數(shù)組為以上的五條待辦事項(xiàng),要渲染的內(nèi)容是ToDoItem這個(gè)自定義組件,也可以是其他內(nèi)置組件。

圖7 ForEach基本使用
點(diǎn)擊放大

ToDoItem這個(gè)自定義組件中,每一個(gè)ToDoItem要顯示的文本參數(shù)content需要外部傳入,參數(shù)傳遞使用花括號(hào)的形式,用content接受數(shù)組內(nèi)的內(nèi)容項(xiàng)item。

最終完成的代碼及其效果如下。

@Entry
@Component
struct ToDoList {...build() {Row() {Column() {Text(...)...ForEach(this.totalTasks,(item) => {TodoItem({content:item})},...)}.width('100%')}.height('100%')}}

圖8 ToDoList頁(yè)面
點(diǎn)擊放大

http://www.risenshineclean.com/news/55456.html

相關(guān)文章:

  • 網(wǎng)站導(dǎo)航圖怎么做百度推廣登錄網(wǎng)站
  • 網(wǎng)站正在建設(shè)中 html源碼快手作品免費(fèi)推廣軟件
  • 海安網(wǎng)站開(kāi)發(fā)seo教程排名第一
  • 大公司網(wǎng)站色彩設(shè)計(jì)萬(wàn)網(wǎng)域名查詢官網(wǎng)
  • 做有獎(jiǎng)競(jìng)猜網(wǎng)站違法嗎網(wǎng)站搭建需要多少錢?
  • 做網(wǎng)站php與python做推廣怎么賺錢
  • 做ppt的軟件模板下載網(wǎng)站有哪些網(wǎng)站建站公司
  • 商丘銷售網(wǎng)站制作自媒體
  • 百度免費(fèi)網(wǎng)站怎樣建設(shè)網(wǎng)絡(luò)推廣的重要性與好處
  • 上海網(wǎng)站建設(shè)公司排名外包接單平臺(tái)
  • 葫蘆島建設(shè)信息網(wǎng)站企業(yè)建站都有什么網(wǎng)站
  • 閑魚怎么做釣魚網(wǎng)站廣告資源發(fā)布平臺(tái)
  • 網(wǎng)站怎么解析到域名百度地圖網(wǎng)頁(yè)版進(jìn)入
  • 徐州專業(yè)網(wǎng)站制作公司網(wǎng)址注冊(cè)在哪里注冊(cè)
  • 百度搜索seo優(yōu)化技巧寧波seo外包推廣排名
  • 微信內(nèi)部劵網(wǎng)站怎么做長(zhǎng)沙百度首頁(yè)優(yōu)化排名
  • 個(gè)人建設(shè)網(wǎng)站還要備案么公司網(wǎng)站建設(shè)需要多少錢
  • 推薦個(gè)做兼職的網(wǎng)站做網(wǎng)上推廣
  • 東莞網(wǎng)站建設(shè) 樂(lè)云seo小程序推廣方案
  • 東營(yíng)機(jī)關(guān)建設(shè)網(wǎng)站抖音宣傳推廣方案
  • 教做縫紉的網(wǎng)站關(guān)鍵詞排名提升工具
  • 廣州網(wǎng)站建設(shè)網(wǎng)絡(luò)推廣怎么網(wǎng)站推廣
  • 北京網(wǎng)站托管seo關(guān)鍵詞排名優(yōu)化軟件怎么選
  • 永州網(wǎng)站開(kāi)發(fā)商品seo優(yōu)化是什么意思
  • 網(wǎng)站案例欣賞seo機(jī)構(gòu)
  • 同性男做性視頻網(wǎng)站seo小白入門教學(xué)
  • 醫(yī)院做網(wǎng)站定位上海seo網(wǎng)站策劃
  • 做平臺(tái)網(wǎng)站一般有php還是js脫發(fā)嚴(yán)重是什么原因引起的
  • 網(wǎng)站正在建設(shè)中代碼百度賬號(hào)中心官網(wǎng)
  • 0511城市建設(shè)網(wǎng)站棚戶區(qū)改造seo關(guān)鍵詞推廣案例