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 位置权限变更监听回调问题
395浏览 • 1回复 待解决
HarmonyOS 如何监听组件自身尺寸变化
256浏览 • 1回复 待解决
HarmonyOS 关于监听网络变化的功能的问题
201浏览 • 1回复 待解决
HarmonyOS UIAbility组件能否对页面变化进行监听
618浏览 • 1回复 待解决
HarmonyOS BLE蓝牙监听设备服务变化值是characteristicValue这个参数值吗?
213浏览 • 1回复 待解决
HarmonyOS CAPI是否支持监听组件可见区域变化事件
714浏览 • 1回复 待解决
HarmonyOS 网络变化监听失效
205浏览 • 1回复 待解决
HarmonyOS onMemoryLevel监听内存变化
56浏览 • 1回复 待解决
HarmonyOS 音频设备变化监听
394浏览 • 1回复 待解决
HarmonyOS page如何监听数据变化
217浏览 • 1回复 待解决
HarmonyOS 装饰器数据变化监听
62浏览 • 1回复 待解决
Array内容监听问题,点击某个按钮,对VM中的数组执行push操作,不会触发监听,但是变更其他值就能触发监听
680浏览 • 1回复 待解决
HarmonyOS Web组件头部参数问题
279浏览 • 1回复 待解决
HarmonyOS 如何监听系统主题变化
260浏览 • 1回复 待解决
HarmonyOS Tabs组件在滑动过程中监听TabContent位置变化
51浏览 • 1回复 待解决
HarmonyOS 如何监听某个变量是否变化
199浏览 • 1回复 待解决
HarmonyOS Text组件上的bindSelectionMenu效果变更
65浏览 • 1回复 待解决
如何监听window大小的变化
688浏览 • 1回复 待解决
如何监听窗口大小的变化
2509浏览 • 1回复 待解决
HarmonyOS 如何监听折叠屏折叠状态变化
304浏览 • 1回复 待解决
HarmonyOS 发现子组件可以通过Watch装饰器监听父组件的变量的变化,有反过来的监听吗?
368浏览 • 2回复 待解决
HarmonyOS 如何监听修改系统时间的变化?
262浏览 • 1回复 待解决
HarmonyOS 如何监听数组元素属性的变化?
790浏览 • 1回复 待解决
HarmonyOS 如何监听text文本变化的行数?
541浏览 • 0回复 待解决
HarmonyOS 如何监听到音频焦点的变化
289浏览 • 1回复 待解决
首先aboutToAppear()事件是放在build()事件之前执行的;其次,观察到代码中并没有对this.model这个对象做重新赋值,所以没有触发到onChangeModel事件。demo里面是触发NavigationBarButtonA中的onClick事件,触发NavigationBarButton中的onChangeModel事件。
在NavigationBarButton中onClick事件可做如下更改: