Harmony OS ets @StorageProp和@Watch修饰同一个变量问题
Harmony OS ets @StorageProp和@Watch修饰同一个变量,当变量值变更时,@watch绑定的函数没有执行。
代码如下:
@Entry
@Component
export struct TestView {
@StorageProp('isHorizontal') @Watch("onChanged") horizontal: boolean = this.getHorizontal();
@State flexDirection: FlexDirection = this.horizontal ? FlexDirection.Row : FlexDirection.Column;
onChanged() {
console.log('receive watch event')
}
public getHorizontal(): boolean {
if (AppStorage.Get('isHorizontal') == null) {
AppStorage.SetOrCreate('isHorizontal', false);
}
return AppStorage.Get('isHorizontal');
}
public setHorizontal(state: boolean): void {
AppStorage.SetOrCreate('isHorizontal', state);
return ;
}
build() {
Flex({
direction: this.flexDirection
}) {
Row() {
Button('TEST').onClick(() => {
console.log('horizontal ' + `${this.horizontal}` + ' change to ' + `${!this.horizontal}`)
this.setHorizontal(!this.horizontal);
console.log('after change = ' + `${this.horizontal}`)
})
}
.width('100%')
.height('100%')
}
.height('100%')
}
}输出Log信息如下:
[phone][Console DEBUG] 12/13 17:57:04 8372 app Log: horizontal false change to true
[phone][Console DEBUG] 12/13 17:57:04 8372 app Log: after change = true
补充:
参照HarmonyOS Developer API指导文档,@StorageProp和@Watch可以修饰同一个变量。
原文描述如下:
应用可以注册回调方法。当一个被@State, @Prop, @Link, @ObjectLink, @Provide, @Consume, @StorageProp, 以及 @StorageLink中任意一个装饰器修饰的变量改变时,均可触发此回调。@Watch中的变量一定要使用(“”)进行包装。
1
2
浏览890 编辑于2021-12-13 10:29未知归属地
全部评论
最多点赞
最新发布
最早发布
写回答
所见即所得编辑器, editor1
工具栏
0/50000
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
- 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
- 如您发布的内容为转载内容,请注明内容来源。
我要发帖子
了解社区公约,与您携手共创和谐专业的开发者社区。







































苏公安网备 32011402010933号