HarmonyOS鸿蒙Next中@Monitor装饰器监听Map

HarmonyOS鸿蒙Next中@Monitor装饰器监听Map

@Monitor支持对数组中的项进行监听,包括多维数组,对象数组。@Monitor无法监听内置类型(Array、Map、Date、Set)的API调用引起的变化。当@Monitor监听数组整体时,只能观测到数组整体的赋值。可以通过监听数组的长度变化来判断数组是否有插入、删除等变化。当前仅支持使用"."的方式表达深层属性、数组项的监听。

目前文档中说不支持Map,但是我需要Map存储一些值,有没有其他方法能替代这个Map

@ObservedV2
class FilterController {
  @Trace args: Map<string, Object> = new Map();
}

更多关于HarmonyOS鸿蒙Next中@Monitor装饰器监听Map的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

确实是不支持的,但我这里有个不算太好的办法:将原有的map包一层

class ObservableMap<K, V> {
 private map: Map<K, V> = new Map<K,V>

  onChange: (key: K, oldValue: V | undefined, newValue: V | undefined) => void = (key, oldValue, newValue) => {
  }

  set(key: K, value: V) {
    let oldValue: V | undefined = this.map.get(key)
    this.map.set(key, value);
    this.onChange(key, oldValue, value)
  }
  get(key:K){
   return this.map.get(key)
  }
  has(key:K){

   return this.map.has(key)
  }
  delete(key:K):boolean{
    let oldValue :V|undefined= this.map.get(key)
    let result = this.map.delete(key)
    if(result){
      this.onChange(key,oldValue,undefined)
    }
    return result
  }
}

然后使用

observableMap :ObservableMap<string,string> = new ObservableMap<string,string>()
  aboutToAppear(): void {
    this.observableMap.onChange = (key:string|undefined,oldValue:string|undefined,newValue:string|undefined)=>{
      hilog.error(0x01, 'MonitorPage',
        `属性名:${key}  由 ${oldValue} 修改为 ${newValue}`)
    }
  }

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


在HarmonyOS鸿蒙Next中,@Monitor装饰器用于监听数据的变化。当应用于Map类型的数据时,@Monitor可以监听Map中键值对的增删改操作。具体来说,@Monitor装饰器会监听Map对象的setdeleteclear方法,并在这些操作发生时触发相应的回调函数。

@Monitor装饰器的使用方式如下:

@Monitor
myMap: Map<string, number> = new Map();

在上面的代码中,myMap是一个被@Monitor装饰器监听的Map对象。当myMap中的键值对发生变化时,系统会自动触发相应的回调函数。

需要注意的是,@Monitor装饰器只能监听Map对象本身的变化,而不能监听Map中值的内部变化。例如,如果Map中的某个值是一个对象,并且该对象的属性发生了变化,@Monitor不会触发回调。

此外,@Monitor装饰器通常与@State@Link等装饰器配合使用,以实现数据与UI的绑定。当Map对象发生变化时,UI会自动更新以反映最新的数据状态。

总结来说,@Monitor装饰器在HarmonyOS鸿蒙Next中用于监听Map对象的变化,支持监听setdeleteclear操作,并触发相应的回调函数。

在HarmonyOS鸿蒙Next中,@Monitor装饰器用于监听状态变量的变化。当应用于Map类型时,@Monitor可以监听Map中键值对的增删改操作。一旦Map发生变化,装饰器会触发相应的回调函数,开发者可以在回调中执行自定义逻辑。例如:

@Monitor
myMap: Map<string, number> = new Map();

// 当myMap发生变化时,触发回调

这种方式非常适合需要在Map变化时执行特定操作的场景。

回到顶部