1
主要學(xué)習(xí)過(guò)程:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/1_1_u5e94_u7528_u6a21_u578b-0000001478061441-V2?catalogVersion=V2
了解了鴻蒙開(kāi)發(fā)
學(xué)習(xí)了開(kāi)發(fā)基礎(chǔ)知識(shí)
學(xué)習(xí)了ArkTS語(yǔ)言(開(kāi)發(fā)語(yǔ)言)
學(xué)習(xí)了ArkUI語(yǔ)言(聲明式UI開(kāi)發(fā)框架)
學(xué)習(xí)由來(lái):
鴻蒙next在11月開(kāi)始千帆大會(huì)后,有大廠(chǎng)開(kāi)始宣布啟動(dòng)開(kāi)發(fā)歉摧。1月已知的高德與小紅書(shū)已經(jīng)基本完成跌前。
學(xué)習(xí)過(guò)程:
鴻蒙開(kāi)發(fā)環(huán)境基本跟Android studio一樣. 然后自己給了ArkTS語(yǔ)言(說(shuō)是JS的超集挡鞍,學(xué)習(xí)過(guò)程O(píng)K)谒臼,然后ArkUI(聲明式UI艇挨,有點(diǎn)參考蘋(píng)果的swiftui会烙,實(shí)時(shí)渲染负懦,很好)。 記憶點(diǎn)需記住很多裝飾器柏腻,就封裝好的名稱(chēng)功能很多纸厉。
現(xiàn)在能開(kāi)發(fā)做產(chǎn)品了嗎?
一般還不行五嫂。開(kāi)發(fā)環(huán)境都還沒(méi)出next正式版,現(xiàn)在就大廠(chǎng)與華為去深度合作開(kāi)發(fā)颗品,幫華為一起發(fā)現(xiàn)問(wèn)題與解決問(wèn)題(開(kāi)發(fā)環(huán)境,第三方服務(wù)功能等)沃缘。例如:支付分享等功能華為都還在開(kāi)發(fā)躯枢,需要微信支付寶等廠(chǎng)商一起協(xié)作完成。 了解是預(yù)計(jì)第一季度開(kāi)發(fā)環(huán)境正式發(fā)布next版本出來(lái)槐臀。第二季度可能開(kāi)始全員開(kāi)發(fā)锄蹂。
為什么要開(kāi)發(fā)鴻蒙?
華為占領(lǐng)市場(chǎng)不少水慨,還有華為后面的pc與車(chē)載等應(yīng)用(都可以同一套適配開(kāi)發(fā))得糜。 最主要他發(fā)了ArkUI-X跨平臺(tái)框架(目前支持 OpenHarmony、HarmonyOS讥巡、Android掀亩、iOS),后面有大概率成為跨平臺(tái)主流欢顷。
2
for..of和for..in均可迭代一個(gè)列表槽棍,但是用于迭代的值卻不同:for..in迭代的是對(duì)象的鍵,而for..of則迭代的是對(duì)象的值。
裝飾器
用來(lái)裝飾類(lèi)炼七、結(jié)構(gòu)體缆巧、方法以及變量,賦予其特殊的含義豌拙,如上述示例中 @Entry 陕悬、 @Component 、 @State 都是裝飾器按傅。具體而言捉超, @Component 表示這是個(gè)自定義組件; @Entry 則表示這是個(gè)入口組件唯绍; @State 表示組件中的狀態(tài)變量拼岳,此狀態(tài)變化會(huì)引起 UI 變更。
組件狀態(tài)管理裝飾器和@Builder裝飾器:
組件狀態(tài)管理裝飾器用來(lái)管理組件中的狀態(tài)况芒,它們分別是:@State惜纸、@Prop、@Link绝骚。
@State裝飾的變量是組件內(nèi)部的狀態(tài)數(shù)據(jù)耐版,當(dāng)這些狀態(tài)數(shù)據(jù)被修改時(shí),將會(huì)調(diào)用所在組件的build方法進(jìn)行UI刷新压汪。
@Prop與@State有相同的語(yǔ)義粪牲,但初始化方式不同。@Prop裝飾的變量必須使用其父組件提供的@State變量進(jìn)行初始化蛾魄,允許組件內(nèi)部修改@Prop變量虑瀑,但更改不會(huì)通知給父組件,即@Prop屬于單向數(shù)據(jù)綁定滴须。
@Link裝飾的變量可以和父組件的@State變量建立雙向數(shù)據(jù)綁定舌狗,需要注意的是:@Link變量不能在組件內(nèi)部進(jìn)行初始化。
@Builder裝飾的方法用于定義組件的聲明式UI描述扔水,在一個(gè)自定義組件內(nèi)快速生成多個(gè)布局內(nèi)容痛侍。
ArkTS提供了@Builder裝飾器,來(lái)修飾一個(gè)函數(shù)魔市,快速生成布局內(nèi)容主届,從而可以避免重復(fù)的UI描述內(nèi)容。
Column和Row容器的兩個(gè)屬性justifyContent和alignItems待德。
https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101667360160710997
JS調(diào)用Web組件方法
您可以使用registerJavaScriptProxy將Web組件中的JavaScript對(duì)象注入到window對(duì)象中君丁,這樣網(wǎng)頁(yè)中的JS就可以直接調(diào)用該對(duì)象了。需要注意的是将宪,要想registerJavaScriptProxy方法生效绘闷,須調(diào)用refresh方法橡庞。下面的示例將ets文件中的對(duì)象testObj注入到了window對(duì)象中。
第三方庫(kù)
https://gitee.com/openharmony-tpc/tpc_resource#https://gitee.com/wedatahub/lom_lyrics
https://ohpm.openharmony.cn/#/cn/result?sortedType=LIKES
頁(yè)面預(yù)覽 @Entry
組件預(yù)覽 @Preview
@Component
struct Title {
context: string
build() {
Text(this.context)
}
}
@Preview
@Component //定義組件片段TitlePreview
struct TitlePreview {
build() {
Title({ context: 'MyTitle' }) //在該片段中聲明將要預(yù)覽的組件Title印蔗,以及該組件依賴(lài)的入?yún)?{context: ’MyTitle’}
}
}
@State:@State裝飾的變量擁有其所屬組件的狀態(tài)扒最,可以作為其子組件單向和雙向同步的數(shù)據(jù)源。當(dāng)其數(shù)值改變時(shí)华嘹,會(huì)引起相關(guān)組件的渲染刷新吧趣。
@Prop:@Prop裝飾的變量可以和父組件建立單向同步關(guān)系,@Prop裝飾的變量是可變的耙厚,但修改不會(huì)同步回父組件强挫。
@Link:@Link裝飾的變量和父組件構(gòu)建雙向同步關(guān)系的狀態(tài)變量,父組件會(huì)接受來(lái)自@Link裝飾的變量的修改的同步颜曾,父組件的更新也會(huì)同步給@Link裝飾的變量纠拔。
@Provide/@Consume:@Provide/@Consume裝飾的變量用于跨組件層級(jí)(多層組件)同步狀態(tài)變量,可以不需要通過(guò)參數(shù)命名機(jī)制傳遞泛豪,通過(guò)alias(別名)或者屬性名綁定。
@Observed:@Observed裝飾class侦鹏,需要觀(guān)察多層嵌套場(chǎng)景的class需要被@Observed裝飾诡曙。單獨(dú)使用@Observed沒(méi)有任何作用,需要和@ObjectLink略水、@Prop連用价卤。
@ObjectLink:@ObjectLink裝飾的變量接收@Observed裝飾的class的實(shí)例,應(yīng)用于觀(guān)察多層嵌套場(chǎng)景渊涝,和父組件的數(shù)據(jù)源構(gòu)建雙向同步慎璧。
AppStorage是應(yīng)用程序中的一個(gè)特殊的單例LocalStorage對(duì)象,是應(yīng)用級(jí)的數(shù)據(jù)庫(kù)跨释,和進(jìn)程綁定胸私,通過(guò)@StorageProp和@StorageLink裝飾器可以和組件聯(lián)動(dòng)。
AppStorage是應(yīng)用狀態(tài)的“中樞”鳖谈,將需要與組件(UI)交互的數(shù)據(jù)存入AppStorage岁疼,比如持久化數(shù)據(jù)PersistentStorage和環(huán)境變量Environment。UI再通過(guò)AppStorage提供的裝飾器或者API接口缆娃,訪(fǎng)問(wèn)這些數(shù)據(jù)捷绒。
框架還提供了LocalStorage,AppStorage是LocalStorage特殊的單例贯要。LocalStorage是應(yīng)用程序聲明的應(yīng)用狀態(tài)的內(nèi)存“數(shù)據(jù)庫(kù)”暖侨,通常用于頁(yè)面級(jí)的狀態(tài)共享,通過(guò)@LocalStorageProp和@LocalStorageLink裝飾器可以和UI聯(lián)動(dòng)崇渗。
@Watch用于監(jiān)聽(tīng)狀態(tài)變量的變化字逗。
$$運(yùn)算符:給內(nèi)置組件提供TS變量的引用函荣,使得TS變量和內(nèi)置組件的內(nèi)部狀態(tài)保持同步。
LocalStorage:頁(yè)面級(jí)UI狀態(tài)存儲(chǔ)扳肛,通常用于UIAbility內(nèi)傻挂、頁(yè)面間的狀態(tài)共享。
AppStorage:特殊的單例LocalStorage對(duì)象挖息,由UI框架在應(yīng)用程序啟動(dòng)時(shí)創(chuàng)建金拒,為應(yīng)用程序UI狀態(tài)屬性提供中央存儲(chǔ);
PersistentStorage:持久化存儲(chǔ)UI狀態(tài)套腹,通常和AppStorage配合使用绪抛,選擇AppStorage存儲(chǔ)的數(shù)據(jù)寫(xiě)入磁盤(pán),以確保這些屬性在應(yīng)用程序重新啟動(dòng)時(shí)的值與應(yīng)用程序關(guān)閉時(shí)的值相同电禀;
Environment:應(yīng)用程序運(yùn)行的設(shè)備的環(huán)境參數(shù)幢码,環(huán)境參數(shù)會(huì)同步到AppStorage中,可以和AppStorage搭配使用尖飞。
和AppStorage不同的是症副,LocalStorage是頁(yè)面級(jí)的,通常應(yīng)用于頁(yè)面內(nèi)的數(shù)據(jù)共享政基。而AppStorage是應(yīng)用級(jí)的全局狀態(tài)共享贞铣,還相當(dāng)于整個(gè)應(yīng)用的“中樞”,持久化數(shù)據(jù)PersistentStorage和環(huán)境變量Environment都是通過(guò)和AppStorage中轉(zhuǎn)沮明,才可以和UI交互辕坝。
ArkUI-X跨平臺(tái) 目前支持 OpenHarmony、HarmonyOS荐健、Android酱畅、iOS,后續(xù)會(huì)逐步增加更多平臺(tái)支持江场。
3
PullToRefresh 下拉刷新纺酸、上拉加載組件 https://gitee.com/openharmony-sig/PullToRefresh ohpm install @ohos/pulltorefresh
降版本到2.0.1就行了
ohpm install @ohos/pulltorefresh@2.0.1
運(yùn)行上面的命令后再把project級(jí)oh-package.json里的版本號(hào)中的“^”字符刪掉,然后重新sync就行了
其他的三方庫(kù)也一樣扛稽,自己手動(dòng)降版本就行
axios 基于promise 的網(wǎng)絡(luò)請(qǐng)求庫(kù) https://gitee.com/openharmony-sig/ohos_axios api9 ohpm install @ohos/axios@2.1.0
ImageKnife 圖像加載緩存庫(kù) https://gitee.com/openharmony-tpc/ImageKnife api9 "@ohos/imageknife": "2.1.1-rc.0"
eftool EfficientTool工具庫(kù) https://gitee.com/yunkss/ef-tool ohpm install @yunkss/eftool
DiskLruCache 磁盤(pán)緩存庫(kù) https://gitee.com/openharmony-sig/ohos_disklrucache ohpm install @ohos/disklrucache
ohos_ijkplayer 基于FFmpeg的視頻播放器 https://gitee.com/openharmony-sig/ohos_ijkplayer
開(kāi)源三方庫(kù)資源匯總
https://gitee.com/openharmony-tpc/tpc_resource
學(xué)習(xí)鴻蒙
開(kāi)發(fā)的一些流程(通知吁峻,媒體,存儲(chǔ)在张,后臺(tái)任務(wù)用含,安全,web等的)
整理了開(kāi)發(fā)必備的一些第三方庫(kù)
問(wèn)題:next現(xiàn)在還在內(nèi)測(cè)帮匾,現(xiàn)在只有大廠(chǎng)在適配啄骇。(個(gè)人開(kāi)發(fā)者基本不給名額)
還需學(xué)習(xí)接入華為相關(guān)SDK(登錄,推送瘟斜,支付等等)缸夹。
第三方庫(kù)還有一些必備的庫(kù)欠缺痪寻。
4
集入一些第三方庫(kù),鴻蒙嘗試寫(xiě)點(diǎn)demo(列表與網(wǎng)絡(luò)請(qǐng)求)
總結(jié)下:
邏輯寫(xiě)法方式應(yīng)該參考了前端js語(yǔ)言虽惭,包括網(wǎng)絡(luò)封裝等等橡类。
權(quán)限邏輯,系統(tǒng)邏輯等應(yīng)該參考了Android芽唇。
UI方式是聲明式的顾画,應(yīng)該參考了蘋(píng)果SwiftUI與谷歌Jetpack Compose
坑點(diǎn):
在網(wǎng)絡(luò)請(qǐng)求發(fā)現(xiàn),開(kāi)發(fā)環(huán)境居然不能請(qǐng)求數(shù)據(jù)匆笤,必須用真機(jī)或模擬器(都太卡了)研侣。 preview模式說(shuō)不行。
開(kāi)發(fā)環(huán)境還沒(méi)優(yōu)化好炮捧。
希望:
央視新聞也啟動(dòng)開(kāi)發(fā)鴻蒙了庶诡,希望next開(kāi)發(fā)環(huán)境一季度能出來(lái),給出符合開(kāi)發(fā)者遙遙領(lǐng)先的開(kāi)發(fā)體驗(yàn)咆课。
等next出來(lái)末誓,馬上正式開(kāi)發(fā)吧。傀蚌。基显。