您的位置:首页 > 游戏 > 手游 > @ObjectLink与@Observed的实践笔记

@ObjectLink与@Observed的实践笔记

2024/10/6 10:41:25 来源:https://blog.csdn.net/bright789/article/details/141890712  浏览:    关键词:@ObjectLink与@Observed的实践笔记

@ObjectLink与@Observed本意就是解决@Link感知不到对象中嵌套对象,数据项是对象的属性变化的问题,在实操的过程中也发现比较多坑,

1.@ObjectLink是用来修饰Componet成员对象属性的,简单类型不行;

2.@ObjectLink修饰的对象的类,必须被@Observed修饰;

因为@Observed修饰的是类,那么后面的出初化/操作,都得使用Class类来操作,不能使用对象字面量表示法,不然感知不到,如

//这个是错误格式,这个可运行,但父子变化后,互相感知不到对方的变化 
this.p.address = {"province":"河北","city":"张家界","area":"某某区"}//这种才是正确的
let addr= new AddressModel();
this.p.address = addr;
addr.province = "河北"
addr.city = "张家界"
addr.area = "某某区"

这个坑我踩了,半天都回不过神来,
@ObjectLink只能管当前Component Object,如果里面还嵌套的话,还得再使用子Component,继续分,如果不使用子Component+@ObjectLink的话,我试了下,数据可以正常改,也会各处去同步,但ui不更新!有没有解决办法?有的,有三种

1.上面说的,再使用子Component+@ObjectLink去细分;

2.重新创建子对象或者深度copy,让系统看到本Object下的类对象不是之前那个了,是新的了

重新建---

const newAddress = new AddressModel();

newAddress.province = "广东";

newAddress.city = "深圳";

newAddress.area = "罗湖";

this.p.address = newAddress; // 赋值一个新的对象

深拷贝--this.p.address = { ...this.p.address, province: "广东", city: "深圳", area: "罗湖" };

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com