HarmonyOS 鸿蒙Next ArkTS关于@observed装饰器的使用

HarmonyOS 鸿蒙Next ArkTS关于@observed装饰器的使用 需要用observed实现功能,使用过程中遇到一些问题。

使用objiectlink在子组件中(当然不能在@entry组件)定义变量A,使用@state在父组件定义变量B。

在父组件中使用子组件时,对变量A初始化:

如果变量的类型是通过 父级.子级 的方式,会报错(The type of the @ObjectLink property ‘Xshuju’ can only be objects of classes decorated with @Observed class decorator in ets (not ts).):

父组件截图:

子组件截图:

报错截图:

解决方法:

1.在子组件中定义一个类并继承在其他文件中的类(在子组件文件使用需要通过 父级.子级方式引用的)。

2.在其他文件中定义时,不要定义在命名空间(namespace)中。


更多关于HarmonyOS 鸿蒙Next ArkTS关于@observed装饰器的使用的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

刚接触ARKTS,也遇到了相同的问题能否详细的说一下。感谢

更多关于HarmonyOS 鸿蒙Next ArkTS关于@observed装饰器的使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


ArkTS的UI代码和功能代码是可以写在同一个ets文件(代码文件的后缀是ets)里面。

这个问题,需要把observed装饰的类直接写在ets文件最外层,不能被包裹,例如:写在namespace中。

如果被包裹了(在其他UI ets文件中调用接口时,就会报错),就需要在最外层新建一个类并继承在模块内部的类,然后导出,同时也要使用observed装饰才行。

文件后缀是.ts的,可以使用重构,然后把后缀改为.ets,不然在其他文件无法调用接口,代码自动补全也不会显示这个接口。特别是对于使用模板创建的ability文件。

谢谢 分享 经验哈

互相学习,后来发现,如果继承,只需要在一个地方继承就可以了,其他地方也能正常使用,不需要每次都继承,

在HarmonyOS鸿蒙Next中,@Observed装饰器用于标记一个类,使其能够被@ObjectLink@Prop装饰的属性观察。@Observed装饰的类通常用于管理状态,并且当该类实例的状态发生变化时,依赖该状态的UI组件会自动更新。

@Observed装饰器的主要作用是将一个类标记为可观察的,这样在类中的属性发生变化时,相关的UI组件可以自动重新渲染。使用@Observed装饰的类通常与@ObjectLink@Prop装饰的属性一起使用,以实现状态与UI的绑定。

例如:

@Observed
class Counter {
  count: number = 0;
}

在这个例子中,Counter类被@Observed装饰,表示它的实例可以被观察。当count属性的值发生变化时,使用@ObjectLink@Prop绑定该实例的UI组件会自动更新。

@Observed装饰器通常用于管理复杂的状态逻辑,尤其是在需要跨组件共享状态时。通过@Observed@ObjectLink@Prop的结合,开发者可以轻松实现状态驱动的UI更新,而无需手动管理状态的同步。

总结来说,@Observed装饰器在鸿蒙Next中用于标记可观察的类,使其状态变化能够自动触发UI更新。

回到顶部