HarmonyOS鸿蒙Next中深度监视时能否不修改变量名而是新增变量名并绑定?能否在接口上深度监视避免写构造函数?双向绑定问题探讨

HarmonyOS鸿蒙Next中深度监视时能否不修改变量名而是新增变量名并绑定?能否在接口上深度监视避免写构造函数?双向绑定问题探讨 深度监视的时候,现在的做法是直接修改变量名,虽然实现了监视,但是没有办法传递给后端了。是不是可以不要直接修改变量名,而是新增一个变量名,将两个变量绑定到一起。现在只能在类上深度监视,能不能在接口上深度监视?实在不想写构造函数。现在observe 只能用在class上面;毕竟前端没有必要写那么多业务逻辑,ts虽然有class,基本没有人用

双向绑定不知道后续会不会搞一下,现在每次都要监控输入框的内容去手动修改变量

开发工具最新版(6.0)   Sdk19


更多关于HarmonyOS鸿蒙Next中深度监视时能否不修改变量名而是新增变量名并绑定?能否在接口上深度监视避免写构造函数?双向绑定问题探讨的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

V2版本可以用UIUtils.makeObserved;V1版本可以用UIUtils.makeV1Observed实现interface数据的深度监听。适用情况可参考官网makeObserved概述:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-new-makeobserved#概述

  1. class的定义在三方包中:开发者无法手动对class中需要观察的属性加上@Trace标签,可以使用makeObserved使得当前对象可以被观察。

  2. 当前类的成员属性不能被修改:因为@Trace观察类属性会动态修改类的属性,这个行为在@Sendable装饰的class中是不被允许的,此时可以使用makeObserved。

  3. interface或者JSON.parse返回的匿名对象:这类场景往往没有明确的class声明,开发者无法使用@Trace标记当前属性可以被观察,此时可以使用makeObserved。

更多关于HarmonyOS鸿蒙Next中深度监视时能否不修改变量名而是新增变量名并绑定?能否在接口上深度监视避免写构造函数?双向绑定问题探讨的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


如果你不想写构造函数,可以不写,采用可选值的方法解决,例如:

@Observed
export class User{
  id?:number;
  @Track
  name?:string;
  age?:number
}

arkts提倡强类型,所有采用class和interface还是比较多的;

扩展:假如有一个User类来自第三方,无法修改,你可以进行继承,增加自己的逻辑,例如:

export class User{
  id?:number;
  name?:string;
  age?:number
}

@Observed
export class Child extends User{
  @Track
  sex?:number
}

在UI界面中使用:

@Entry
@Component
struct Index {
  @State child: Child  = new Child();

  build() {
    Column({ space: 20 }) {
      Text(this.child.sex == 1 ? "男" : "女")
      Button("修改").onClick((event: ClickEvent) => {
        this.child.sex = 1;
      })
    }.width("100%")
  }
}

输出结果:

cke_18868.png

点击修改按钮:

cke_23541.png

在HarmonyOS鸿蒙Next中,深度监视支持新增变量名并绑定,无需修改变量名。通过@Watch装饰器可监听属性变化,实现双向绑定。接口上深度监视可通过@Observed@ObjectLink装饰器实现,避免显式构造函数。这些机制基于ArkTS语言特性,提供响应式数据管理能力。

在HarmonyOS Next中,深度监视目前确实存在一些限制。针对你的问题:

  1. 变量名处理:当前@ObservedV2装饰器会直接修改原始变量,确实会影响后端数据传递。建议可以通过创建副本变量的方式来解决,比如使用扩展运算符或Object.assign()创建新对象,将监视逻辑与原始数据分离。

  2. 接口监视:目前@ObservedV2确实只能用于class,不支持interface。这是ARKTS的当前设计限制。如果不想写构造函数,可以考虑使用简单的数据对象配合响应式更新方法。

  3. 双向绑定:HarmonyOS目前还没有提供类似Vue v-model的完整双向绑定机制。对于输入框场景,可以通过@State配合事件监听实现类似效果:

[@State](/user/State) text: string = ''

build() {
  TextInput({ placeholder: '请输入' })
    .onChange((value: string) => {
      this.text = value
    })
}

这些确实是当前框架的痛点,期待后续版本能提供更灵活的数据绑定方案。建议关注官方文档的更新,看看是否会引入更便捷的响应式编程模式。

回到顶部