HarmonyOS 鸿蒙Next:从网络中获取的json转成模型后@Observed,@ObjectLink观察对象UI不会更新

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next:从网络中获取的json转成模型后@Observed@ObjectLink观察对象UI不会更新 如果是new出来的则可以更新,如果json层级比较多,3层以上,总不能通过json 在循环创建对象,最后赋值进去吧?有其他解决办法吗?

10 回复

更多关于HarmonyOS 鸿蒙Next:从网络中获取的json转成模型后@Observed,@ObjectLink观察对象UI不会更新的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


感谢,我懂了,在更新数据后使用JSON.parse(JSON.stringify(this.list))或者[...],我尝试了一下,是可以进行更新的,但是是全局更新,或者其中一条item更新,这样的话我们应用更新数据的时候会有一点闪烁。目前还没有好的解决办法可以局部监听更新,如果从json获取数据的话,可能就得有笨方法,获得json后,手动创建new对象然后再进行赋值这种了,

你好,我还是不明白,可以具体点嘛,

json转来转去,还不如如此,相信DDD,没必要解释这个代码了吧[@Observed 多层UI不更新](https://developer.huawei.com/consumer/cn/forum/topic/0204140465046316143?fid=0102683795438680754)

[@Observed](/user/Observed)
class BaseObserve {
  ___hide: boolean //用于触发UI更新字段

  // 更新UI ,随你怎么obj.xx.xx这样赋值了
  update(call: Function, forceUpdate?: boolean) {
    call()
    if (forceUpdate) {
      this.___hide = !this.___hide
    }
  }
}

这么难用,官方不修一下吗

那就改变地址吧

this.list = JSON.parse(JSON.stringify(this.list))

感谢回复,JSON.parse()底层并不是new对象出来的,所以本质上还是会观察不到的,

或者你写个场景demo,我给你改一下。

不用@Observed@ObjectLink这种方式 你是如何观察这种场景呢,比如A对象里面有B数组,B数组里面有C数组,然后更改C数组里面的值,组件如何刷新UI呢?

在HarmonyOS(鸿蒙)开发中,当你从网络中获取JSON数据并转换成模型后,如果使用了@Observed@ObjectLink注解的对象UI没有更新,这通常意味着数据绑定或观察者机制没有正确触发。

可能的原因包括:

  1. 模型类未正确实现INotifyPropertyChanged接口:确保你的模型类实现了INotifyPropertyChanged接口,并在属性值改变时触发PropertyChanged事件。这是鸿蒙数据绑定框架更新UI的关键。

  2. 数据转换后未触发属性变更:在将JSON数据赋值给模型属性时,确保这些属性的setter被调用,从而触发INotifyPropertyChangedPropertyChanged事件。

  3. UI组件未正确绑定数据:检查你的XAML或布局文件中,UI组件是否通过{{}}语法或数据绑定表达式正确绑定了模型属性。

  4. 线程问题:确保数据更新操作在主线程(UI线程)上执行。鸿蒙系统对于UI更新有线程限制,非UI线程不能直接更新UI。

如果上述检查后问题依旧存在,可能是因为其他特定的实现细节或框架限制。此时,建议直接查阅鸿蒙系统的官方文档或示例代码,确保所有步骤都符合鸿蒙的开发规范。

如果问题依旧没法解决请联系官网客服, 官网地址是 https://www.itying.com/category-93-b0.html

回到顶部