做网站素材在哪找,服务器架设国外做违法网站,前端做网站需要学什么,大数据获客走的太急疼的是脚#xff0c;逼的太紧累的是心#xff0c;很多时候#xff0c;慢一点也没关系#xff0c;多给自己一些耐心和等待#xff0c;保持热爱#xff0c;当下即是未来#xff0c;生活自有安排! 目录 一#xff0c;定义 二#xff0c;LocalStorageProp定义 三… 走的太急疼的是脚逼的太紧累的是心很多时候慢一点也没关系多给自己一些耐心和等待保持热爱当下即是未来生活自有安排! 目录 一定义 二LocalStorageProp定义 三LocalStorageProp装饰器使用规则说明 四LocalStorageProp变量的传递/访问规则说明 五LocalStorageLink定义 六 LocalStorageLink装饰器使用规则说明 七LocalStorageLink变量的传递/访问规则说明 八双向同步使用 九单向同步使用 十将LocalStorage实例从UIAbility共享到一个或多个视图 一定义
LocalStorage是页面级的UI状态存储通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage支持UIAbility实例内多个页面间状态共享。
LocalStorage是ArkTS为构建页面级别状态变量提供存储的内存内“数据库”。 注意 1应用程序可以创建多个LocalStorage实例LocalStorage实例可以在页面内共享也可以通过GetShared接口实现跨页面、UIAbility实例内共享。 2组件树的根节点即被Entry装饰的Component可以被分配一个LocalStorage实例此组件的所有子组件实例将自动获得对该LocalStorage实例的访问权限。 3被Component装饰的组件最多可以访问一个LocalStorage实例和AppStorage未被Entry装饰的组件不可被独立分配LocalStorage实例只能接受父组件通过Entry传递来的LocalStorage实例。一个LocalStorage实例在组件树上可以被分配给多个组件。 4LocalStorage中的所有属性都是可变的。 应用程序决定LocalStorage对象的生命周期。当应用释放最后一个指向LocalStorage的引用时比如销毁最后一个自定义组件LocalStorage将被JS Engine垃圾回收。
LocalStorage根据与Component装饰的组件的同步类型不同提供了两个装饰器 LocalStoragePropLocalStorageProp装饰的变量和与LocalStorage中给定属性建立单向同步关系。 LocalStorageLinkLocalStorageLink装饰的变量和在Component中创建与LocalStorage中给定属性建立双向同步关系。 限制条件
1LocalStorage创建后命名属性的类型不可更改。后续调用Set时必须使用相同类型的值。
2LocalStorage是页面级存储GetShared接口仅能获取当前Stage通过windowStage.loadContent传入的LocalStorage实例否则返回undefined。
二LocalStorageProp定义
如果要建立LocalStorage和自定义组件的联系需要使用LocalStorageProp和LocalStorageLink装饰器。使用LocalStorageProp(key)/LocalStorageLink(key)装饰组件内的变量key标识了LocalStorage的属性。
当自定义组件初始化的时候LocalStorageProp(key)/LocalStorageLink(key)装饰的变量会通过给定的key绑定LocalStorage对应的属性完成初始化。本地初始化是必要的因为无法保证LocalStorage一定存在给定的key这取决于应用逻辑是否在组件初始化之前在LocalStorage实例中存入对应的属性。
LocalStorageProp(key)是和LocalStorage中key对应的属性建立单向数据同步我们允许本地改变的发生但是对于LocalStorageProp本地的修改永远不会同步回LocalStorage中相反如果LocalStorage给定key的属性发生改变改变会被同步给LocalStorageProp并覆盖掉本地的修改。
三LocalStorageProp装饰器使用规则说明
LocalStorageProp变量装饰器说明装饰器参数key常量字符串必填字符串需要有引号。允许装饰的变量类型Object、class、string、number、boolean、enum类型以及这些类型的数组。 类型必须被指定建议和LocalStorage中对应属性类型相同否则会发生类型隐式转换从而导致应用行为异常。不支持any不允许使用undefined和null。同步类型单向同步从LocalStorage的对应属性到组件的状态变量。组件本地的修改是允许的但是LocalStorage中给定的属性一旦发生变化将覆盖本地的修改。被装饰变量的初始值必须指定如果LocalStorage实例中不存在属性则作为初始化默认值并存入LocalStorage中。 四LocalStorageProp变量的传递/访问规则说明
传递/访问说明从父节点初始化和更新禁止LocalStorageProp不支持从父节点初始化只能从LocalStorage中key对应的属性初始化如果没有对应key的话将使用本地默认值初始化。初始化子节点支持可用于初始化State、Link、Prop、Provide。是否支持组件外访问否。 注意 当装饰的数据类型为boolean、string、number类型时可以观察到数值的变化。 当装饰的数据类型为class或者Object时可以观察到赋值和属性赋值的变化即Object.keys(observedObject)返回的所有属性。 当装饰的对象是array时可以观察到数组添加、删除、更新数组单元的变化。 当LocalStorageProp(key)装饰的数值改变被观察到时修改不会被同步回LocalStorage对应属性键值key的属性中。 当前LocalStorageProp(key)单向绑定的数据会被修改即仅限于当前组件的私有成员变量改变其他的绑定该key的数据不会同步改变。 当LocalStorageProp(key)装饰的数据本身是状态变量它的改变虽然不会同步回LocalStorage中但是会引起所属的自定义组件的重新渲染。 当LocalStorage中key对应的属性发生改变时会同步给所有LocalStorageProp(key)装饰的数据LocalStorageProp(key)本地的修改将被覆盖。 五LocalStorageLink定义
如果我们需要将自定义组件的状态变量的更新同步回LocalStorage就需要用到LocalStorageLink。
LocalStorageLink(key)是和LocalStorage中key对应的属性建立双向数据同步 本地修改发生该修改会被写回LocalStorage中 LocalStorage中的修改发生后该修改会被同步到所有绑定LocalStorage对应key的属性上包括单向LocalStorageProp和通过prop创建的单向绑定变量、双向LocalStorageLink和通过link创建的双向绑定变量变量。
六 LocalStorageLink装饰器使用规则说明
LocalStorageLink变量装饰器说明装饰器参数key常量字符串必填字符串需要有引号。允许装饰的变量类型Object、class、string、number、boolean、enum类型以及这些类型的数组。 类型必须被指定建议和LocalStorage中对应属性类型相同否则会发生类型隐式转换从而导致应用行为异常。不支持any不允许使用undefined和null。同步类型双向同步从LocalStorage的对应属性到自定义组件从自定义组件到LocalStorage对应属性。被装饰变量的初始值必须指定如果LocalStorage实例中不存在属性则作为初始化默认值并存入LocalStorage中。 七LocalStorageLink变量的传递/访问规则说明
传递/访问说明从父节点初始化和更新禁止LocalStorageLink不支持从父节点初始化只能从LocalStorage中key对应的属性初始化如果没有对应key的话将使用本地默认值初始化。初始化子节点支持可用于初始化State、Link、Prop、Provide。是否支持组件外访问否。 注意 当装饰的数据类型为boolean、string、number类型时可以观察到数值的变化。 当装饰的数据类型为class或者Object时可以观察到赋值和属性赋值的变化即Object.keys(observedObject)返回的所有属性。 当装饰的对象是array时可以观察到数组添加、删除、更新数组单元的变化。 当LocalStorageLink(key)装饰的数值改变被观察到时修改将被同步回LocalStorage对应属性键值key的属性中。 LocalStorage中属性键值key对应的数据一旦改变属性键值key绑定的所有的数据包括双向LocalStorageLink和单向LocalStorageProp都将同步修改。 当LocalStorageLink(key)装饰的数据本身是状态变量它的改变不仅仅会同步回LocalStorage中还会引起所属的自定义组件的重新渲染。 八双向同步使用
1创建数据类
export default class YuanZhen {public name: string YuanZhen;public age: number 18;constructor(name: string, age: number) {this.name namethis.age age}
}
2在Entry入口创建LocalStorage
import YuanZhen from ./bean/YuanZhen;
import ProvideTest from ./ProvideTest;
let localState : Recordstring,YuanZhen { localState : new YuanZhen(袁震,18) }
let storage:LocalStorage new LocalStorage(localState)Entry(storage)
Component
struct Index {LocalStorageLink(localState) yuanzhen:YuanZhen new YuanZhen(袁震1,20)build() {Column(){Text(父name: this.yuanzhen.name\nage:this.yuanzhen.age).fontSize(50).fontWeight(FontWeight.Bold).onClick(() {this.yuanzhen.name 袁震2this.yuanzhen.age 25})ProvideTest()}}
}
3在子组件使用LocalStorageLink
import YuanZhen from ./bean/YuanZhenComponent
export default struct ProvideTest {LocalStorageLink(localState)yuanZhen:YuanZhen new YuanZhen(袁震3,30)build() {Row() {Column() {Text(子name:this.yuanZhen.name\nage:this.yuanZhen.age).fontSize(50).fontWeight(FontWeight.Bold).onClick(() {this.yuanZhen.name 袁震子组件this.yuanZhen.age35})}.width(100%)}.height(100%)}
}
运行
点击父点击子
九单向同步使用
1在Entry入口创建LocalStorage
import YuanZhen from ./bean/YuanZhen;
import ProvideTest from ./ProvideTest;
let localState : Recordstring,YuanZhen { localState : new YuanZhen(袁震,18) }
let storage:LocalStorage new LocalStorage(localState)function aa(){storage.set(localState,new YuanZhen(袁震aa,22))
}Entry(storage)
Component
struct Index {LocalStorageProp(localState) yuanzhen:YuanZhen new YuanZhen(袁震1,20)build() {Column(){Text(父name: this.yuanzhen.name\nage:this.yuanzhen.age).fontSize(50).fontWeight(FontWeight.Bold).onClick(() {this.yuanzhen.name 袁震2this.yuanzhen.age 25})ProvideTest()}}
}
2子组件
import YuanZhen from ./bean/YuanZhenComponent
export default struct ProvideTest {LocalStorageProp(localState)yuanZhen:YuanZhen new YuanZhen(袁震3,30)build() {Row() {Column() {Text(子name:this.yuanZhen.name\nage:this.yuanZhen.age).fontSize(50).fontWeight(FontWeight.Bold).onClick(() {this.yuanZhen.name 袁震子组件this.yuanZhen.age35})}.width(100%)}.height(100%)}
}
运行
点击父点击子
因为是单向同步所以它只改变自身的值不会改变 LocalStorage 里面的值
如果将父组件修改为
import YuanZhen from ./bean/YuanZhen;
import ProvideTest from ./ProvideTest;
let localState : Recordstring,YuanZhen { localState : new YuanZhen(袁震,18) }
let storage:LocalStorage new LocalStorage(localState)function aa(){storage.set(localState,new YuanZhen(袁震aa,22))
}Entry(storage)
Component
struct Index {LocalStorageProp(localState) yuanzhen:YuanZhen new YuanZhen(袁震1,20)build() {Column(){Text(父name: this.yuanzhen.name\nage:this.yuanzhen.age).fontSize(50).fontWeight(FontWeight.Bold).onClick(() {aa()})ProvideTest()}}
}
运行
点击父点击子
因为点击父组件改变的是localstorage里面的值所以子组件也修改了。 十将LocalStorage实例从UIAbility共享到一个或多个视图
在UIAbility中创建LocalStorage并调用windowStage.loadContent传递LocalStorage
export default class EntryAbility extends UIAbility {onWindowStageCreate(windowStage: window.WindowStage): void {//创建localStoragelet localState : Recordstring,YuanZhen { localState : new YuanZhen(袁震,18) }let storage:LocalStorage new LocalStorage(localState)windowStage.loadContent(pages/Index,storage, (err, data) {if (err.code) {hilog.error(0x0000, testTag, Failed to load the content. Cause: %{public}s, JSON.stringify(err) ?? );return;}hilog.info(0x0000, testTag, Succeeded in loading the content. Data: %{public}s, JSON.stringify(data) ?? );});}}在Entry中获取LocalStorage
import YuanZhen from ./bean/YuanZhen;
import ProvideTest from ./ProvideTest;let storage LocalStorage.GetShared()function aa(){storage.set(localState,new YuanZhen(袁震aa,22))
}Entry(storage)
Component
struct Index {LocalStorageProp(localState) yuanzhen:YuanZhen new YuanZhen(袁震1,20)build() {Column(){Text(父name: this.yuanzhen.name\nage:this.yuanzhen.age).fontSize(50).fontWeight(FontWeight.Bold).onClick(() {aa()})ProvideTest()}}
}