赞
踩
只展示
父组件中的状态父组件通过 @State修饰符 定义变量,子组件通过 @Prop修饰符 获取变量。
Prop是 「单向传递」
,父组件将变量「拷贝」一份交给子组件使用,子组件不可修改变量。
父组件
// 声明变量
@State count:number = 1
// 传值
Son({count:this.count})
子组件
// 接收
@Prop count:number
需要修改
父组件中的状态父组件通过 @State修饰符 定义变量,子组件通过 @Link修饰符 获取变量。
Link是 「双向传递」
,父组件会将变量的「引用」交给子组件,相当于子组件可以直接修改父组件中的变量。
父组件
与Prop不同的是,当子组件使用@Link接收变量时(需要修改变量),父组件传值时需要使用 $。
// 声明变量
@State count:number = 1
// 传值
Son({count:$count})
子组件
// 接收
@Link count:number
@Prop | @Link | |
---|---|---|
同步类型 | 单向同步 | 双向同步 |
允许装饰的变量类型 | string、number、boolean、enum类型 父组件对象类型,子组件是对象属性 不可以是数组、any | 父子类型一致:string、number、boolean、enum、object、class,以及他们的数组 数组中元素发生变化会引起刷新 嵌套类型以及数组中的对象属性无法触发视图更新 |
初始化方式 | 禁止子组件初始化 | 父组件传递,禁止子组件初始化f |
@Prop和@Link均无法对 嵌套对象以及数组元素为对象 的场景进行双向数据同步,此时需要使用「@ObjectLink」和「@Observed」装饰器。
操作流程(这里用嵌套对象举例,数组元素为对象的使用情况一致)
父组件通过 @Provide修饰符 定义变量,子组件通过 @Consume修饰符 获取变量。
不同于@State,父组件「不需要传递参数」,子组件通过 @Consume修饰符 「直接使用变量」即可。
父组件
// 声明状态
@Provide count:number = 1
// 无需传值
Son()
后代组件
// 接收
@Consume count:number
在 EntryAbility.ts 中声明共享数据。文件路径如下:entry > src > main > ets > entryAbility > EntryAbility.ts
语法:
二者相比, AppStorage.SetOrCreate()会判断变量是否存在,如果存在就重新赋值,否则创建。更加推荐使用 AppStorage.SetOrCreate()。
AppStorage.SetOrCreate('username','田本初')
let name:string = AppStorage.Get('appname')
正常使用该变量发现并没有正常展示
拼接后发现name是undefined
这是因为 Previewer预览器 并不会再执行 EntryAbility.ts文件,所以该变量的值为undefined。
需要使用本地模拟器进行验证,启动本地模拟器后,变量正常显示。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。