LocalStorage是頁面級的UI狀態(tài)存儲退唠,頁面組件(組件樹根節(jié)點(diǎn))獲取LocalStorage是通過@Entry裝飾器接收的參數(shù)傳入,子組件自動獲取LocalStorage的訪問權(quán)限误甚,獲取的也是通過@Entry傳入的LocalStorage。頁面內(nèi)共享同一個LocalStorage實(shí)例谱净。支持一個UIAbility內(nèi)多個頁面間共享一個LocalStorage窑邦。getShared僅能獲取當(dāng)前Stage通過UIAbility中windonStage.loadcontent傳入的LocalStorage
不與自定義組件進(jìn)行關(guān)聯(lián)的使用場景:
LocalStorage若是想要跟自定義組件建立聯(lián)系,需要使用裝飾器:@LocalStorageProp和@LocalStorageLink
一壕探、@LocalStorageProp:此裝飾器裝飾的變量與LocalStorage中key對應(yīng)的屬性建立單向同步關(guān)系
示例:@LocalStorageProp(key) name:string = ‘’冈钦;
裝飾的變量需要初始化,因?yàn)榇薻ey(常量字符串)可能沒值李请。另外不能通過父組件傳值賦值瞧筛,只能通過LocalStorage中的key初始化,若沒有對應(yīng)key导盅,用默認(rèn)值初始化较幌,并將值存入LocalStorage中,注意:此時是存入白翻,不是同步乍炉。
支持初始化子節(jié)點(diǎn),可用于初始化子節(jié)點(diǎn)的@State 滤馍、@Prop岛琼、@Link、@Provide狀態(tài)變量
只能在組件內(nèi)訪問纪蜒,不支持在組件外部訪問
同步類型:數(shù)據(jù)單向同步衷恭。
框架行為:
1、被@LocalStorageProp裝飾的變量值改變時纯续,不會同步會回LocalStorage中随珠,但會驅(qū)動對應(yīng)的UI組件刷新渲染.
2灭袁、若是LocalStorage(key)的值發(fā)生改變,那么所有@LocalStorageProp(key)裝飾的變量都會發(fā)生改變窗看,并且覆蓋其本地的改變茸歧。
示例1:
示例1中:
1、點(diǎn)擊name1显沈,name1值改為‘value change’软瞎,驅(qū)動name1顯示內(nèi)容改變,不會同步給LocalStorage拉讯,所以name2顯示內(nèi)容不變涤浇。
2、點(diǎn)擊name2魔慷,會改變LocalStorage中name對應(yīng)的值只锭,單向同步給name1。改為'keke'
二院尔、@LocalStorageLink:此裝飾器裝飾的變量與LocalStorage中key對應(yīng)的屬性建立雙向同步關(guān)系
示例:@LocalStorageLink(key)? age:number:= 11蜻展;
裝飾的變量需要初始化,因?yàn)榇薻ey可能沒值邀摆。同樣不能通過父組件傳值賦值纵顾,只能通過LocalStorage中的key初始化。若沒有對應(yīng)的key栋盹,用默認(rèn)值初始化施逾,并存入LocalStorage中。
支持初始化子節(jié)點(diǎn)贞盯,可用于初始化子節(jié)點(diǎn)的@State音念、@Prop沪饺、@Link躏敢、@Provide狀態(tài)變量
同樣只能在組件內(nèi)訪問,不支持在組件外部訪問
@LocalStorageLink(key)和LocalStorage中key對應(yīng)的值會建立數(shù)據(jù)雙向同步整葡。
本地變量age改變件余,會把值同步回LocalStorage中key對應(yīng)的值,同樣LocalStorage中key對應(yīng)的值改變遭居,也會把值同步到本地變量age啼器。即:把a(bǔ)ge的新值同步回LocalStorage中key對應(yīng)的值,同樣LocalStorage中key對應(yīng)的值發(fā)生改變俱萍,本地變量age的值也發(fā)生同步改變端壳。
同步類型:雙向同步。
框架行為:
當(dāng)@LocalStorageLink(key)裝飾的的變量發(fā)生改變時枪蘑,會把修改的結(jié)果值同步回LocalStorage中key對應(yīng)的屬性值损谦。
當(dāng)LocalStorage中的key對應(yīng)的屬性值發(fā)生改變時岖免,會把改變的結(jié)果值同步到所有key綁定的數(shù)據(jù)上面(包括LocalStorageLink(key)和LocalStorageProp裝飾的變量。
當(dāng)@LocalStorageLink(key)裝飾的變量發(fā)生該改變時照捡,在同步數(shù)據(jù)回LocalStorage中的同時颅湘,還會驅(qū)動與其綁定的UI組件進(jìn)行刷新渲染
示例2:
示例2中:
1、點(diǎn)擊name1栗精,name1值改為‘value change’闯参,驅(qū)動name1顯示內(nèi)容改變,同時會同步給LocalStorage悲立,所以name2顯示內(nèi)容對應(yīng)的不是狀態(tài)變量鹿寨,所以顯示內(nèi)容不會改變,但LocalStorage的值改變會同步給所有綁定了對應(yīng)key的數(shù)據(jù)薪夕,所以name3也會改變释移,并驅(qū)動name3的UI刷新渲染。
2寥殖、點(diǎn)擊name2玩讳,會改變LocalStorage中name對應(yīng)的值,會同步給name1和name3嚼贡。均改為'keke'熏纯,同時驅(qū)動name1和name3組件UI重新渲染
示例代碼3:若LocaStorage中沒有對應(yīng)的key,用默認(rèn)值初始化粤策,并將值存入LocalStorage中樟澜,下次通過key取的值是LocalStorage中的值,而不是新的默認(rèn)值
下面示例3是針對初始值而言:
示例3中叮盘,因?yàn)橐婚_始LocalStorage中沒有name鍵秩贰,?value1在使用默認(rèn)值123初始化的時候,也把值存到了存到LocalStorage中name對應(yīng)的屬性值上面柔吼,所以當(dāng)value2是優(yōu)先用LocalStorage中name對應(yīng)的值來初始化的毒费,所以還是123。用@LocalStorageLink('name')同樣如此愈魏。
Ability內(nèi)多個頁面共享的示例如下:
1觅玻、在當(dāng)前Ability中的windowStage.loadConent傳入LocalStorage
2、在組件入口處通過getShare獲取培漏,并通過@Entry傳入