HarmonyOS 使用@ObservedV2的类,无法从父组件通过构造函数传递给子组件

@ObservedV2
export class CeEditorViewModel extends BaseViewModel {


  @Component
  export struct PesoEditor {
  viewModel : CeEditorViewModel | null = null;
  controller: PesoController = new PesoController(this.viewModel!);
}

当父组件已经通过构造的方式进行传递PesoEditor({ viewModel: editorViewModel , editProvider: this.editorProvider})

子组件的viewModelProvider还是undefined请问这个问题的原因是什么?

HarmonyOS
10h前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

需要在子组件中拿到父组件的最新传递雇来的,重新对PesoController 赋值。因为在子组件中 viewModel : CeEditorViewModel | null = null; 声明的时候是null值,所以 viewModel 1 的日志输出为什么是null

同时1、@ObservedV2类的构造函数中对成员变量进行赋值或者修改时,此修改不会经过代理(因为是直接对数据源中的值进行修改),也就无法被观测到。所以,如果在类的构造函数中使用定时器修改类中的成员变量,即使该修改成功执行了,也不会触发UI的刷新。

2、@ObservedV2装饰器与@Trace装饰器用于装饰类以及类中的属性,使得被装饰的类和属性具有深度观测的能力:@ObservedV2装饰器与@Trace装饰器需要配合使用,单独使用@ObservedV2装饰器或@Trace装饰器没有任何作用。被@Trace装饰器装饰的属性property变化时,仅会通知property关联的组件进行刷新。在嵌套类中,嵌套类中的属性property被@Trace装饰且嵌套类被@ObservedV2装饰时,才具有触发UI刷新的能力。在继承类中,父类或子类中的属性property被@Trace装饰且该property所在类被@ObservedV2装饰时,才具有触发UI刷新的能力。在@ObservedV2装饰的类中,只有被@Trace装饰的属性才可以用在UI中,未被@Trace装饰的属性不可以用在UI中。@ObservedV2的类实例目前不支持使用JSON.stringify进行序列化。参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-new-observedv2-and-trace-V5#概述

分享
微博
QQ
微信
回复
7h前
相关问题
组件组件传递函数
288浏览 • 1回复 待解决
弹窗组件调用父组件函数传递
1025浏览 • 1回复 待解决
组件事件能否到传递组件
2404浏览 • 1回复 待解决
HarmonyOS TabContent无法套用在组件
291浏览 • 1回复 待解决