当前位置: 首页 > news >正文

今标 网站建设莱芜区宣传部网站

今标 网站建设,莱芜区宣传部网站,重庆网站建设公司是什么意思,学会python做网站【HarmonyOS】Observed和ObjectLink嵌套对象属性更改UI不刷新问题 一、问题背景 使用了Observed和ObjectLink#xff0c;修改嵌套对象的属性#xff0c;UI还是不刷新#xff0c;常见的问题有以下三种形式#xff1a; 1.多级嵌套#xff0c;嵌套对象的类并没有添加Observ…【HarmonyOS】Observed和ObjectLink嵌套对象属性更改UI不刷新问题 一、问题背景 使用了Observed和ObjectLink修改嵌套对象的属性UI还是不刷新常见的问题有以下三种形式 1.多级嵌套嵌套对象的类并没有添加Observed进行监听 2.多级嵌套嵌套对象的View组件没有抽离出来添加ObjectLink进行该级对象的监听绑定 3.嵌套对象并没有new出来创建直接赋值没有创建对象的过程无法激活Observed监听 二、代码举例 以代码示例举例 1.创建了接口TestInfoInterFace 父类TestInfo嵌套类TestItem 。 interface TestInfoInterFace {name: string;items: TestItem[]; }class TestItem {content: string ;isClicked: boolean false; }Observed class TestInfo {name: string;items: TestItem[];constructor(name: string, items: TestItem[]) {this.name name;this.items items;} } 2.添加测试数据渲染列表单元格数据基本类型结构为TestInfo。 Entry Component struct TestPage {State mTestDataArr: TestInfo[] [new TestInfo(测试数据1, [{content: 单元数据1,isClicked: false}, {content: 单元数据1,isClicked: false}]),new TestInfo(测试数据2, [{content: 单元数据1,isClicked: false}, {content: 单元数据1,isClicked: false}]),new TestInfo(测试数据3, [{content: 单元数据1,isClicked: false}, {content: 单元数据1,isClicked: false}]),]build() {Column() {ForEach(this.mTestDataArr, (item: TestInfoInterFace) {ChildView({mTestInfo: item})})}.width(100%).height(100%)} } 3.抽离嵌套组件ChildView 绑定双向监听。 Component export struct ChildView {private TAG: string TestPage;ObjectLink mTestInfo: TestInfobuild() {Column() {Text(this.mTestInfo.name).backgroundColor(Color.Red).fontSize(px2fp(52))ForEach(this.mTestInfo.items, (tempInfo: TestItem) {Text(tempInfo.content).fontSize(px2fp(52)).backgroundColor(tempInfo.isClicked ? Color.Blue : Color.Yellow).onClick(() {tempInfo.isClicked !tempInfo.isClickedconsole.log(this.TAG, JSON.stringify(tempInfo))})})Divider()}} } 渲染界面后的效果为 此时我们点击单元数据1或者2去修改isClicked选中状态并不会刷新UI整个代码有以上总结的三个问题 1.TestItem 多级嵌套嵌套对象的类并没有添加Observed进行监听 2.ChildView 多级嵌套了一个层级直接就进行了循环渲染其嵌套对象的View组件没有抽离出来添加ObjectLink进行该级对象的监听绑定 3.mTestDataArr嵌套对象中的TestItem并没有new出来创建是通过花括号直接赋值没有创建对象的过程无法激活Observed监听 三、完整DEMO示例 interface TestInfoInterFace {name: string;items: TestItem[]; }// TODO 问题1多层级时需要逐个层级进行类监听 Observed class TestItem {content: string ;isClicked: boolean false;constructor(content: string, isClicked: boolean) {this.content content;this.isClicked isClicked;} }Observed class TestInfo {name: string;items: TestItem[];constructor(name: string, items: TestItem[]) {this.name name;this.items items;} }Entry Component struct TestPage {// TODO 问题3 每个被设置Observed的对象需要new出来创建才能激活监听花括号的形式赋值并不会激活监听。State mTestDataArr: TestInfo[] [new TestInfo(测试数据1, [new TestItem(单元数据1, false), new TestItem(单元数据2, false)]),new TestInfo(测试数据2, [new TestItem(单元数据1, false), new TestItem(单元数据2, false)]),new TestInfo(测试数据3, [new TestItem(单元数据1, false), new TestItem(单元数据2, false)]),// new TestInfo(测试数据1, [{// content: 单元数据1,// isClicked: false// }, {// content: 单元数据1,// isClicked: false// }]),// new TestInfo(测试数据2, [{// content: 单元数据1,// isClicked: false// }, {// content: 单元数据1,// isClicked: false// }]),// new TestInfo(测试数据3, [{// content: 单元数据1,// isClicked: false// }, {// content: 单元数据1,// isClicked: false// }]),]build() {Column() {ForEach(this.mTestDataArr, (item: TestInfoInterFace) {ChildView({mTestInfo: item})})}.width(100%).height(100%)} }Component export struct ChildView {private TAG: string TestPage;ObjectLink mTestInfo: TestInfobuild() {Column() {Text(this.mTestInfo.name).backgroundColor(Color.Red).fontSize(px2fp(52))// TODO 多层级时需要逐个层级进行剥离创建子组件和绑定双向监听。// ForEach(this.mTestInfo.items, (tempInfo: TestItem) {// Text(tempInfo.content)// .fontSize(px2fp(52))// .backgroundColor(tempInfo.isClicked ? Color.Blue : Color.Yellow)// .onClick(() {// tempInfo.isClicked !tempInfo.isClicked// console.log(this.TAG, JSON.stringify(tempInfo))// })// })ForEach(this.mTestInfo.items, (tempInfo: TestItem) {ItemView({mItem: tempInfo}).margin({top: px2vp(100)})})Divider()}} }Component export struct ItemView {private TAG: string TestPage;ObjectLink mItem: TestItembuild() {Text(this.mItem.content).fontSize(px2fp(52)).backgroundColor(this.mItem.isClicked ? Color.Blue : Color.Yellow).onClick(() {this.mItem.isClicked !this.mItem.isClickedconsole.log(this.TAG, JSON.stringify(this.mItem))})} }
http://www.w-s-a.com/news/757793/

相关文章:

  • 常州地区做网站个人购物网站需要备案吗
  • 网站建设公司 跨界鱼科技专业做服务器的网站都有哪些
  • 欧洲网站服务器网站建设费用计入什么科目
  • 网站的色调苏州策划网站模板建站公司
  • 怎么看网站用的什么后台公路建设项目可行性研究报告编制办法哪个网站查最新版
  • 可以看的网站的浏览器有哪些专业APP客户端做网站
  • 如何做网站推广自己的产品推荐个网站好吗
  • 网站经营范围wordpress注入点
  • 学校网站开发协议夫妻网络网站建设
  • 福州网站seo推广优化微信商家小程序怎么弄
  • 免费网站推广工具在游戏网站做中介合法
  • 网站建设前的规划网站建设公司六安
  • 公司注册网站开发的行业表述南宁在百度上建网站
  • 创建企业网站国内网站用django做的
  • 云主机网站的空间在哪制作微网站的平台
  • 长沙做网站 青创互联wordpress4.4.1
  • 宜昌哪里有专业做网站的网站开发做什么的
  • 3小说网站开发东莞网站公司哪家好
  • 做网站安全联盟解ps网站设计概述
  • 聊城公司做网站wordpress连接域名
  • 宣传网站建设的意义台州行app官网下载
  • 温州 网站优化网站开发公司前置审批
  • 网站开发具体的工作内容网站下载app免费
  • seo网站建设时文章频率昆山网站建设ikelv
  • 中天建设中瑞物资网站优化建立生育支持政策体系
  • 网站页面的宽度大网站怎样选域名
  • icp网站备案流程wordpress post 405
  • 网站怎样上传到空间重庆有多少网站
  • 用模板建商城购物网站嘉定专业网站建设
  • 网站开发与应用 论文dede手机医院网站模板