HarmonyOS监听组件参数变化,未变更问题
代码如下:
@Observed
export class NavigationBarButtonModel {
icon?: ResourceStr
iconSize?: Length
text?: ResourceStr
textSize?: Length
textColor?: ResourceColor
onClick?: (event?: ClickEvent) => void
tag?: string
constructor()
constructor(onClick: (event?: ClickEvent) => void)
constructor(onClick: (event?: ClickEvent) => void, icon: ResourceStr)
constructor(onClick: (event?: ClickEvent) => void, icon: ResourceStr, iconSize: Length)
constructor(onClick?: (event?: ClickEvent) => void, icon?: ResourceStr, iconSize?: Length) {
this.onClick = onClick
this.icon = icon
this.iconSize = iconSize ?? "22vp"
this.textSize = "22fp"
this.textColor = "#fff000"
}
}
@Component
struct NavigationBarButton {
@ObjectLink @Watch('onChangeModel') model: NavigationBarButtonModel
private clickEvent?: (event?: ClickEvent) => void
@Prop text: string
build() {
Row() {
if(this.model.icon) {
Image(this.model.icon)
.width(this.model.iconSize ?? "22vp")
.height(this.model.iconSize ?? "22vp")
.objectFit(ImageFit.Contain)
}else if(this.model.text) {
Text(this.model.text)
.fontSize(this.model.textSize ?? "22fp")
.fontColor(this.model.textColor ?? "22fp")
.titleStyle()
}
}
.width("46vp")
.height("46vp")
.justifyContent(FlexAlign.Center)
.onClick(this.clickEvent ?? (() => {}))
}
onChangeModel() {
if(this.clickEvent !== this.model.onClick) {
this.clickEvent = this.model.onClick
}
}
aboutToAppear() {
this.clickEvent = this.model.onClick;
}
}
引入组件NavigationBarButton({model: model});
第一次修改构造一个model,修改 icon,onclick,组件渲染,触发aboutToAppear,没触发onChangeModel,点击 button,触发 onclick 事件。
第二次修改 model,只修改model的onClick,并没有触发aboutToAppear,也没触发onChangeModel,点击 button,触发的是 onclick 第一次的事件。
在第二次只修改model的 onClick时, 如何操作,点击button触发的是第二次的 click 事件?为什么不触发onChangeModel事件?
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS UIAbility组件能否对页面变化进行监听
286浏览 • 1回复 待解决
HarmonyOS CAPI是否支持监听组件可见区域变化事件
368浏览 • 1回复 待解决
HarmonyOS 音频设备变化监听
120浏览 • 1回复 待解决
HarmonyOS Web组件头部参数问题
111浏览 • 1回复 待解决
Array内容监听问题,点击某个按钮,对VM中的数组执行push操作,不会触发监听,但是变更其他值就能触发监听
261浏览 • 1回复 待解决
HarmonyOS 如何监听text文本变化的行数?
271浏览 • 0回复 待解决
HarmonyOS 如何监听数组元素属性的变化?
261浏览 • 1回复 待解决
HarmonyOS IJKPlayer是否支持变更XComponent组件渲染画面
354浏览 • 1回复 待解决
HarmonyOS 发现子组件可以通过Watch装饰器监听父组件的变量的变化,有反过来的监听吗?
212浏览 • 2回复 待解决
HarmonyOS数据库数据变化是否可以监听
385浏览 • 1回复 待解决
如何监听窗口大小的变化
2117浏览 • 1回复 待解决
如何监听window大小的变化
358浏览 • 1回复 待解决
HarmonyOS 音频管理-监听音量变化无反应
268浏览 • 1回复 待解决
如何监听数组内对象属性变化
2255浏览 • 1回复 待解决
UIAbility中是否可以监听页面变化
1403浏览 • 1回复 待解决
HarmonyOS page 参数问题
240浏览 • 1回复 待解决
HarmonyOS 多个@Prop变化顺序问题
194浏览 • 1回复 待解决
HarmonyOS网络监听问题
232浏览 • 1回复 待解决
如何监听文件或文件目录的变化
1643浏览 • 1回复 待解决
HarmonyOS 父组件中的变量发现变化时,如何子组件的子组件联动变化?
200浏览 • 1回复 待解决
如何监听Viewmodel里变量值的变化
1872浏览 • 1回复 待解决
使用@Observed/@ObjectLink监听多层状态的变化
1092浏览 • 1回复 待解决
HarmonyOS 键盘事件监听问题
442浏览 • 1回复 待解决
如何监听指定Ability的生命周期变化?
342浏览 • 1回复 待解决
HarmonyOS如何监听系统音量按键导致的音量变化
394浏览 • 1回复 待解决
首先aboutToAppear()事件是放在build()事件之前执行的;其次,观察到代码中并没有对this.model这个对象做重新赋值,所以没有触发到onChangeModel事件。demo里面是触发NavigationBarButtonA中的onClick事件,触发NavigationBarButton中的onChangeModel事件。
在NavigationBarButton中onClick事件可做如下更改: