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 位置权限变更监听回调问题
62浏览 • 1回复 待解决
HarmonyOS UIAbility组件能否对页面变化进行监听
383浏览 • 1回复 待解决
HarmonyOS CAPI是否支持监听组件可见区域变化事件
484浏览 • 1回复 待解决
HarmonyOS Web组件头部参数问题
218浏览 • 1回复 待解决
HarmonyOS 音频设备变化监听
243浏览 • 1回复 待解决
Array内容监听问题,点击某个按钮,对VM中的数组执行push操作,不会触发监听,但是变更其他值就能触发监听
447浏览 • 1回复 待解决
HarmonyOS IJKPlayer是否支持变更XComponent组件渲染画面
483浏览 • 1回复 待解决
HarmonyOS 如何监听text文本变化的行数?
411浏览 • 0回复 待解决
HarmonyOS 如何监听数组元素属性的变化?
472浏览 • 1回复 待解决
HarmonyOS 如何监听修改系统时间的变化?
68浏览 • 1回复 待解决
如何监听window大小的变化
525浏览 • 1回复 待解决
如何监听窗口大小的变化
2315浏览 • 1回复 待解决
HarmonyOS 发现子组件可以通过Watch装饰器监听父组件的变量的变化,有反过来的监听吗?
314浏览 • 2回复 待解决
HarmonyOS 组件使用CustomBuilder作为参数传参使用问题
200浏览 • 1回复 待解决
HarmonyOS 如何实时监听NavPathStack的size的变化?
39浏览 • 1回复 待解决
HarmonyOS数据库数据变化是否可以监听
486浏览 • 1回复 待解决
如何监听数组内对象属性变化
2347浏览 • 1回复 待解决
UIAbility中是否可以监听页面变化
1503浏览 • 1回复 待解决
HarmonyOS网络监听问题
314浏览 • 1回复 待解决
HarmonyOS 音频管理-监听音量变化无反应
362浏览 • 1回复 待解决
HarmonyOS page 参数问题
339浏览 • 1回复 待解决
HarmonyOS 怎样变更账号主体
50浏览 • 0回复 待解决
HarmonyOS 怎样变更账号主体?
107浏览 • 1回复 待解决
HarmonyOS 多个@Prop变化顺序问题
292浏览 • 1回复 待解决
首先aboutToAppear()事件是放在build()事件之前执行的;其次,观察到代码中并没有对this.model这个对象做重新赋值,所以没有触发到onChangeModel事件。demo里面是触发NavigationBarButtonA中的onClick事件,触发NavigationBarButton中的onChangeModel事件。
在NavigationBarButton中onClick事件可做如下更改: