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
确实是不支持的,但我这里有个不算太好的办法:将原有的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
对象的set
、delete
和clear
方法,并在这些操作发生时触发相应的回调函数。
@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
对象的变化,支持监听set
、delete
和clear
操作,并触发相应的回调函数。
在HarmonyOS鸿蒙Next中,@Monitor
装饰器用于监听状态变量的变化。当应用于Map
类型时,@Monitor
可以监听Map
中键值对的增删改操作。一旦Map
发生变化,装饰器会触发相应的回调函数,开发者可以在回调中执行自定义逻辑。例如:
@Monitor
myMap: Map<string, number> = new Map();
// 当myMap发生变化时,触发回调
这种方式非常适合需要在Map
变化时执行特定操作的场景。