国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【開(kāi)發(fā)者說(shuō)】HarmonyOS實(shí)踐之應(yīng)用狀態(tài)變量共享

HarmonyOS開(kāi)發(fā)者 ? 來(lái)源:未知 ? 2023-12-26 21:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

# 開(kāi)發(fā)者說(shuō) #

【開(kāi)發(fā)者說(shuō)】欄目是為HarmonyOS開(kāi)發(fā)者提供的展示和分享平臺(tái),在這里,大家可以發(fā)表自己的技術(shù)洞察和見(jiàn)解,也可以展示自己的開(kāi)發(fā)心得和成果。

歡迎大家積極投稿,后臺(tái)回復(fù)【投稿】,即可獲得投稿渠道。期待你們的分享~

平時(shí)在開(kāi)發(fā)的過(guò)程中,我們會(huì)在應(yīng)用中共享數(shù)據(jù),在不同的頁(yè)面間共享信息。雖然常用的共享信息,也可以通過(guò)不同頁(yè)面中組件間信息共享的方式,但有時(shí)使用應(yīng)用級(jí)別的狀態(tài)管理會(huì)讓開(kāi)發(fā)工作變得簡(jiǎn)單。

根據(jù)不同的使用場(chǎng)景,ArkTS提供了以下幾種應(yīng)用狀態(tài)管理的能力:

  • LocalStorage:使用范圍在同一頁(yè)面,頁(yè)面與卡片和頁(yè)面與UIAbility內(nèi)部,負(fù)責(zé)UI狀態(tài)存儲(chǔ)。

  • AppStorage:運(yùn)行時(shí)存儲(chǔ),保存在內(nèi)存中,應(yīng)用范圍全局共享,提供統(tǒng)一的存儲(chǔ)供所有頁(yè)面訪問(wèn)。

  • PersistentStorage:持久化存儲(chǔ),保存在硬盤(pán)上,在應(yīng)用退出或重啟后,數(shù)據(jù)依舊保留。

下面通過(guò)簡(jiǎn)單的程序示例,熟悉一下這三種用法。其中示例程序中包含了以下主要文件:

wKgaomWK1C6APAa9AAAqPUjy7vc591.png

LocalStorage

頁(yè)面級(jí)的UI狀態(tài)存儲(chǔ),同一個(gè)頁(yè)面共享同一個(gè)LocalStorage,不同的頁(yè)面都可以綁定對(duì)應(yīng)的LocalStorage。最常用的就是更新服務(wù)卡片和跨頁(yè)面的信息傳遞。

場(chǎng)景一:更新服務(wù)卡片

服務(wù)卡片中被@Entry裝飾的@Component,可以被分配一個(gè)LocalStorage實(shí)例,在組件內(nèi)部,通過(guò)@LocalStorageProp裝飾器定義本地變量,并綁定到對(duì)應(yīng)組件上。更新卡片時(shí),先定義一個(gè)包含了和LocalStorageProp屬性同名的參數(shù)并放到formBindingData中,然后通過(guò)formProvider.updateForm函數(shù),就可以更新服務(wù)卡片了。

我們要在EntryFormAbility.ets中通過(guò)傳遞LocalStorage改變服務(wù)卡片中的默認(rèn)Hello的文本標(biāo)簽為當(dāng)前時(shí)間。

實(shí)踐步驟:

1.修改服務(wù)卡片布局文件,文件開(kāi)頭添加:

let storage = new LocalStorage();

并為Entry增加參數(shù)storage。

例如,WidgetCard.ets,默認(rèn):

@Entry
@Component
struct WidgetCard {
...

改之后:

let storage = new LocalStorage();
@Entry(storage)
@Component
struct WidgetCard {
...

2.在EntryFormAbility.ets中,用裝飾器LocalStorageProp定義本地變量,裝飾器的參數(shù)必須要和formBindingData中的屬性名稱(chēng)相同。

例如,在接收方服務(wù)卡片中定義如下:

@LocalStorageProp('localprop') localValue: string = 'Hello';

(左右滑動(dòng)查看更多)

wKgaomWK1C6AJ3KoAABks3rrSSg990.png

卡片標(biāo)簽?zāi)J(rèn)顯示了Hello。

在發(fā)送方EntryFormAbility.ts文件的onFormEvent函數(shù)里:

onFormEvent(formId, message) {
  let date = new Date();
  let str = date.getHours().toString().padStart(2, '0') + ':' +  date.getMinutes().toString().padStart(2, '0') + ':' + date.getSeconds().toString().padStart(2, '0')
  let formData = {
    'localprop': 'Time: ' + str,
  };
  let formInfo = formBindingData.createFormBindingData(formData)
  formProvider.updateForm(formId, formInfo).then((data) => {
    console.info('FormAbility updateForm success.' + JSON.stringify(data));
  }).catch((error) => {
    console.error('FormAbility updateForm failed: ' + JSON.stringify(error));
  })
}

(左右滑動(dòng)查看更多)

formData對(duì)象里包含了名稱(chēng)為localprop的鍵值,它通過(guò)formBindingData由formProvider傳遞給服務(wù)卡片,服務(wù)卡片接收到該對(duì)象后,就自動(dòng)把該對(duì)象賦值給LocalStorage,相應(yīng)的LocalStorageProp也自動(dòng)跟著刷新。

這個(gè)動(dòng)作是通過(guò)點(diǎn)擊卡片上的update按鈕,觸發(fā)了postCardAction事件從而調(diào)用了onFormEvent函數(shù),執(zhí)行結(jié)果如下:

wKgaomWK1C6AZG9fAABxWwxCj9w604.png

場(chǎng)景二:跨頁(yè)面的信息傳遞

在頁(yè)面初次加載時(shí),可以在EntryAbility.ts中傳遞一個(gè)LocalStorage對(duì)象給要打開(kāi)的頁(yè)面。

我們打算在index.ets頁(yè)面加載的時(shí)候,在EntryAbility中傳遞一個(gè)包含abilitycount值為1的Storage,頁(yè)面加載后界面顯示該值。

實(shí)踐步驟:

1.在EntryAbility.ts中定義一個(gè)LocalStorage類(lèi)型的變量,里面包含abilitycount屬性。

export default class EntryAbility extends UIAbility {
  storage: LocalStorage = new LocalStorage({
    'abilitycount': 1
});

(左右滑動(dòng)查看更多)

在onWindowStageCreate函數(shù)中,將默認(rèn)的:

windowStage.loadContent('pages/Index', (err, data) => {

(左右滑動(dòng)查看更多)

改為傳遞參數(shù)的方式,如下:

windowStage.loadContent('pages/Index', this.storage);

(左右滑動(dòng)查看更多)

2.在頁(yè)面端Index.ets中,文件開(kāi)頭添加代碼來(lái)獲取共享的LocalStorage。

let storage = LocalStorage.GetShared()

(左右滑動(dòng)查看更多)

在結(jié)構(gòu)體內(nèi)部,通過(guò)裝飾器LocalStorageProp加同樣屬性名稱(chēng)作為參數(shù),定義一個(gè)變量。

@LocalStorageProp('abilitycount') abilityCount: number = 0;

(左右滑動(dòng)查看更多)

這樣名為abilitycount的值就通過(guò)LocalStorage傳遞到頁(yè)面了,本地默認(rèn)的值0變?yōu)榱藗鬟f過(guò)來(lái)的值1。

下圖中LocalStorage的值就是頁(yè)面打開(kāi)時(shí)顯示的傳遞過(guò)來(lái)的值。

wKgaomWK1C6AS1jmAABmvakR39w885.png

AppStorage

全局的UI狀態(tài)存儲(chǔ),在運(yùn)行時(shí)階段可以在不同的頁(yè)面間共享信息。

我們通過(guò)在Index.ets頁(yè)面創(chuàng)建一個(gè)變量放到AppStorage中,然后分別在First.ets頁(yè)面和Second.ets頁(yè)面訪問(wèn)和修改。

實(shí)踐步驟:

1.首先在Index.ets中,通過(guò)AppStorage定義一個(gè)屬性。

AppStorage.SetOrCreate('appcount', 10);

(左右滑動(dòng)查看更多)

然后,在組件結(jié)構(gòu)體中使用StorageProp裝飾器定義一個(gè)變量,參數(shù)為之前定義的appcount屬性。

@Entry()
@Component
struct Index {


@StorageProp('appcount')appValue:number=0;

(左右滑動(dòng)查看更多)

2.在First.ets頁(yè)面中,通過(guò)StorageProp定義一個(gè)appValue變量,關(guān)聯(lián)到appcount屬性上。

struct First {
@StorageProp('appcount')appValue:number=0;

(左右滑動(dòng)查看更多)

在本地修改時(shí),把用戶(hù)輸入的值寫(xiě)入AppStorage,使用如下語(yǔ)句:

AppStorage.Set('appcount', this.textApp);

(左右滑動(dòng)查看更多)

Second.ets頁(yè)面與First.ets頁(yè)面功能完全相同,主要顯示AppStorage在不同頁(yè)面顯示和修改的效果。

如下圖,主頁(yè)面、第一個(gè)頁(yè)面和第二個(gè)頁(yè)面初始狀態(tài)下,讀取到的AppStorage中的同一個(gè)屬性的值都是10。

wKgaomWK1C-AJFezAAFeUGhxXHg546.png

在第一個(gè)頁(yè)面First.ets中把AppStorage中的屬性值改為11,我們發(fā)現(xiàn)在主頁(yè)面Index.ets和Second.ets中,對(duì)應(yīng)的屬性值都發(fā)生了變化。

wKgaomWK1C-AcV89AAFSIyt6gV8562.png

同樣,在第二個(gè)頁(yè)面Second.ets中把AppStorage中的屬性值改為12,我們發(fā)現(xiàn)在Index.ets和First.ets中,對(duì)應(yīng)的屬性值也都變?yōu)榱烁暮蟮闹怠?/span>

wKgaomWK1C-AAGj7AAFSnN8K34c249.png

如上測(cè)試,我們發(fā)現(xiàn)的確可以通過(guò)AppStorage在不同頁(yè)面間共享數(shù)據(jù)。

PersistentStorage

持久化存儲(chǔ)UI狀態(tài)。保存在PersistentStorage中的數(shù)據(jù),即使應(yīng)用退出了,對(duì)應(yīng)的值依然會(huì)保留,不是在內(nèi)存中,而是存儲(chǔ)在固定存儲(chǔ)介質(zhì)上的。

我們通過(guò)在Index.ets頁(yè)面創(chuàng)建一個(gè)屬性放到PersistentStorage中,然后分別在First.ets頁(yè)面和Second.ets頁(yè)面進(jìn)行修改,然后再重啟應(yīng)用觀察結(jié)果。

實(shí)踐步驟:

1.首先在Index.ets中,在PersistentStorage里定義一個(gè)屬性。

PersistentStorage.PersistProp('persistentcount', 100);

(左右滑動(dòng)查看更多)

然后在組件結(jié)構(gòu)體中,通過(guò)裝飾器StorageProp定義一個(gè)屬性為persistentcount的變量。

@Entry()
@Component
struct Index {
@StorageProp('persistentcount')persistentValue:number=0;

(左右滑動(dòng)查看更多)

2.在First.ets頁(yè)面中,我們通過(guò)裝飾器StorageProp定義一個(gè)變量綁定persistentcount屬性。

@Entry
@Component
structFirst{
@StorageProp('persistentcount')persistentValue:number=0;

(左右滑動(dòng)查看更多)

通過(guò)輸入框輸入新值改變?cè)瓉?lái)存儲(chǔ)在PersistentStorage的內(nèi)容。

AppStorage.Set('persistentcount', this.textPersistent);

(左右滑動(dòng)查看更多)

演示效果如下圖,Index.ets頁(yè)面,在初始時(shí)AppStorage和PersistentStorage中的對(duì)應(yīng)屬性值分別是10和100,在First.ets頁(yè)面中,我們分別改為11和111。

wKgaomWK1C-AdnKLAADnuQWNcXQ857.png

關(guān)閉應(yīng)用,然后重新打開(kāi),如下圖所示,AppStorage中的屬性值恢復(fù)為了10,PersistentStorage中的屬性值依舊是111,是改后的值。這證明了PersistentStorage有持續(xù)化存儲(chǔ)的作用。

wKgaomWK1C-AOHllAACPVtpknEI178.png

總結(jié)

通過(guò)這次實(shí)踐,熟悉了不同的狀態(tài)變量在應(yīng)用中的不同應(yīng)用范圍,選用合適的狀態(tài)變量會(huì)讓?xiě)?yīng)用開(kāi)發(fā)簡(jiǎn)單快捷,本地頁(yè)面內(nèi)部使用LocalStorage保存數(shù)據(jù),應(yīng)用頁(yè)面間通過(guò)AppStorage傳遞信息,PersistentStorage可以持久化存儲(chǔ)數(shù)據(jù)信息。

更多推薦


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2153

    瀏覽量

    36045

原文標(biāo)題:【開(kāi)發(fā)者說(shuō)】HarmonyOS實(shí)踐之應(yīng)用狀態(tài)變量共享

文章出處:【微信號(hào):HarmonyOS_Dev,微信公眾號(hào):HarmonyOS開(kāi)發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    HarmonyOS首登微信公開(kāi)課,分享跨平臺(tái)適配與體驗(yàn)提升實(shí)踐經(jīng)驗(yàn)

    的兼容性挑戰(zhàn)與解決方案。此次分享作為微信與HarmonyOS共建生態(tài)的一次具體實(shí)踐,展現(xiàn)了雙方在技術(shù)開(kāi)發(fā)方面的積極交流與協(xié)作。 作為微信生態(tài)每年一度的核心溝通平臺(tái),微信公開(kāi)課始終是連接開(kāi)發(fā)者
    的頭像 發(fā)表于 02-02 09:22 ?301次閱讀
    <b class='flag-5'>HarmonyOS</b>首登微信公開(kāi)課,分享跨平臺(tái)適配與體驗(yàn)提升<b class='flag-5'>實(shí)踐</b>經(jīng)驗(yàn)

    九聯(lián)科技亮相2025開(kāi)放原子開(kāi)發(fā)者大會(huì)

    11月21-22日,以“AI共智,開(kāi)源共享”為主題的2025開(kāi)放原子開(kāi)發(fā)者大會(huì)在北京盛大舉辦。作為開(kāi)源鴻蒙生態(tài)的核心共建力量,九聯(lián)科技旗下子公司九聯(lián)開(kāi)鴻受邀出席大會(huì),與來(lái)自產(chǎn)學(xué)研用各領(lǐng)域的技術(shù)專(zhuān)家、企業(yè)代表、高校學(xué)者與開(kāi)發(fā)者齊聚
    的頭像 發(fā)表于 11-27 15:04 ?383次閱讀

    2025開(kāi)源鴻蒙開(kāi)發(fā)者激勵(lì)計(jì)劃正式啟動(dòng)

    11月21日,2025開(kāi)放原子開(kāi)發(fā)者大會(huì)盛大啟幕,聚焦“AI共智,開(kāi)源共享”主題,吸引了來(lái)自全球的開(kāi)發(fā)者、企業(yè)技術(shù)領(lǐng)袖、社區(qū)維護(hù)及高校科研力量參會(huì)。作為大會(huì)的重要組成部分,開(kāi)源鴻蒙技
    的頭像 發(fā)表于 11-27 14:44 ?666次閱讀

    元服務(wù)發(fā)布配置開(kāi)發(fā)者服務(wù)信息

    您作為開(kāi)發(fā)者的相關(guān)信息將面向元服務(wù)發(fā)布區(qū)域的用戶(hù)公開(kāi),其中客服聯(lián)系方式可能會(huì)提供給用戶(hù),用于咨詢(xún)相關(guān)問(wèn)題。 登錄AppGallery Connect,點(diǎn)擊“APP與元服務(wù)”。 選擇要發(fā)布的元服務(wù)
    發(fā)表于 10-31 17:58

    QCon·上海站HarmonyOS開(kāi)發(fā)者技術(shù)分論壇:共探鴻蒙開(kāi)發(fā)新機(jī)遇

    論壇(以下簡(jiǎn)稱(chēng)“論壇”)成功舉辦,論壇聚焦 AI 實(shí)踐落地與技術(shù)賦能,邀請(qǐng)多位華為技術(shù)專(zhuān)家深度解讀并分享 HarmonyOS AI輔助開(kāi)發(fā)能力、多設(shè)備適配解決方案、場(chǎng)景化賦能、性能調(diào)優(yōu)、場(chǎng)景能力共建以及React?Native性
    的頭像 發(fā)表于 10-24 15:59 ?880次閱讀
    QCon·上海站<b class='flag-5'>HarmonyOS</b><b class='flag-5'>開(kāi)發(fā)者</b>技術(shù)分論壇:共探鴻蒙<b class='flag-5'>開(kāi)發(fā)</b>新機(jī)遇

    2025開(kāi)放原子開(kāi)發(fā)者大會(huì)11月啟幕

    開(kāi)發(fā)者年度盛會(huì)即將登場(chǎng)!2025開(kāi)放原子開(kāi)發(fā)者大會(huì)將于11月21-22日,在北京北人亦創(chuàng)國(guó)際會(huì)展中心盛大召開(kāi)。大會(huì)以“一切為了開(kāi)發(fā)者”為主題,匯聚全球開(kāi)源智慧——國(guó)內(nèi)外優(yōu)秀開(kāi)發(fā)者、學(xué)術(shù)
    的頭像 發(fā)表于 10-24 14:05 ?957次閱讀

    曙光網(wǎng)絡(luò)SugonRI開(kāi)發(fā)者社區(qū)正式上線

    在人工智能與工業(yè)深度融合的大潮中,工業(yè)軟件正在成為推動(dòng)產(chǎn)業(yè)升級(jí)的關(guān)鍵引擎。為了讓更多開(kāi)發(fā)者快速掌握工業(yè)級(jí)編程技術(shù)、共享行業(yè)實(shí)踐成果,曙光網(wǎng)絡(luò)正式推出開(kāi)發(fā)者社區(qū)——曙睿(SugonRI)
    的頭像 發(fā)表于 09-04 09:58 ?953次閱讀

    HarmonyOS 5】金融應(yīng)用開(kāi)發(fā)鴻蒙組件實(shí)踐

    原生鴻蒙操作系統(tǒng)星河版,面向開(kāi)發(fā)者開(kāi)放申請(qǐng),余承東宣布鴻蒙生態(tài)設(shè)備數(shù)達(dá) 8 億臺(tái);建設(shè)銀行、郵儲(chǔ)銀行等完成鴻蒙原生應(yīng)用 Beta 版本開(kāi)發(fā)。 2024 年 10 月 22 日: HarmonyOS
    的頭像 發(fā)表于 07-11 18:20 ?959次閱讀
    【<b class='flag-5'>HarmonyOS</b> 5】金融應(yīng)用<b class='flag-5'>開(kāi)發(fā)</b>鴻蒙組件<b class='flag-5'>實(shí)踐</b>

    HDC 2025開(kāi)發(fā)者主題演講精彩回顧

    開(kāi)發(fā)者解決方案升級(jí)等內(nèi)容,同時(shí)多位生態(tài)伙伴分享基于HarmonyOS的最新開(kāi)發(fā)實(shí)踐,為開(kāi)發(fā)者提供切實(shí)可行的創(chuàng)新思路,進(jìn)一步推動(dòng)鴻蒙生態(tài)的繁榮
    的頭像 發(fā)表于 07-09 11:20 ?1312次閱讀

    HarmonyOS next】ArkUI-X休閑益智猜字謎【基礎(chǔ)】

    // 當(dāng)前題號(hào) @State listArr: QuetionModel[] = [] // 題庫(kù) 僅用三個(gè)狀態(tài)變量就搞定游戲核心邏輯,簡(jiǎn)潔高效! 三、關(guān)鍵代碼解析 1. 資源加載與初始化
    發(fā)表于 06-26 20:01

    華為正式啟動(dòng)HarmonyOS 6開(kāi)發(fā)者Beta

    在2025年華為開(kāi)發(fā)者大會(huì)(HDC)上,華為正式啟動(dòng)HarmonyOS 6開(kāi)發(fā)者Beta,并全面展示一年多以來(lái)與合作伙伴共建鴻蒙生態(tài)的創(chuàng)新成果。
    的頭像 發(fā)表于 06-24 15:42 ?837次閱讀

    開(kāi)發(fā)者即創(chuàng)世——HarmonyOS極客馬拉松2025英雄召集令

    在萬(wàn)物智聯(lián)的浪潮中,每一次技術(shù)突破都可能成為改變世界的支點(diǎn)。HarmonyOS極客馬拉松2025正式啟動(dòng),誠(chéng)邀開(kāi)發(fā)者以代碼為筆,在鴻蒙生態(tài)的畫(huà)布上書(shū)寫(xiě)創(chuàng)新篇章。 這里沒(méi)有遙不可及的科幻概念,只有
    發(fā)表于 05-12 10:16

    Pura X****闊折疊適配:解鎖超視覺(jué)與高效交互的全新體驗(yàn)

    3月20日,華為發(fā)布業(yè)界首款闊折疊手機(jī)Pura X,其獨(dú)特的16:10闊型屏設(shè)計(jì),為用戶(hù)帶來(lái)煥然一新的體驗(yàn)。為了幫助開(kāi)發(fā)者更好的適配闊折疊設(shè)備,華為在HarmonyOS開(kāi)發(fā)者官網(wǎng)上線了“最佳實(shí)
    發(fā)表于 04-14 15:30

    HarmonyOS Next V2 @Local 和@Param

    @State 對(duì)狀態(tài)變量更改的檢測(cè)混亂的問(wèn)題: @State 修飾的狀態(tài)變量 可以是組件內(nèi)部自己定義的 @State 修飾的狀態(tài) 也可以由外部父組件傳遞 這樣就導(dǎo)致了狀態(tài)數(shù)據(jù)來(lái)源不唯
    的頭像 發(fā)表于 04-02 18:27 ?1047次閱讀
    <b class='flag-5'>HarmonyOS</b> Next V2 @Local 和@Param

    HarmonyOS Next V2 @Monitor 和@Computed

    HarmonyOS Next V2 @Monitor 和@Computed @Monitor 介紹 @Monitor 是狀態(tài)把管理 V2 版本中的用于監(jiān)聽(tīng)狀態(tài)變量修改的技術(shù)。 它可以直接用在
    的頭像 發(fā)表于 04-02 18:26 ?791次閱讀