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 CAPI是否支持监听组件可见区域变化事件
72浏览 • 1回复 待解决
HarmonyOS数据库数据变化是否可以监听
201浏览 • 1回复 待解决
HarmonyOS 音频管理-监听音量变化无反应
62浏览 • 1回复 待解决
如何监听window大小的变化
148浏览 • 1回复 待解决
如何监听窗口大小的变化
1626浏览 • 1回复 待解决
UIAbility中是否可以监听页面变化
1179浏览 • 1回复 待解决
如何监听数组内对象属性变化
1907浏览 • 1回复 待解决
HarmonyOS 键盘事件监听问题
99浏览 • 1回复 待解决
HarmonyOS如何监听系统音量按键导致的音量变化
118浏览 • 1回复 待解决
如何监听文件或文件目录的变化
1375浏览 • 1回复 待解决
如何监听Viewmodel里变量值的变化
1617浏览 • 1回复 待解决
使用@Observed/@ObjectLink监听多层状态的变化
661浏览 • 1回复 待解决
HarmonyOS 如何实现对页面声命周期变化的统一监听
101浏览 • 1回复 待解决
如何监听指定Ability的生命周期变化?
97浏览 • 1回复 待解决
如何监听输入法输入内容的变化?
86浏览 • 1回复 待解决
ArkTS中如何监听状态变量的变化?
328浏览 • 1回复 待解决
如何实现一个监听网络变化的方法
168浏览 • 1回复 待解决
HarmonyOS 如何准确获取ArkUI组件尺寸变化情况?
140浏览 • 1回复 待解决
HarmonyOS 使用@ohos.ArkUI.observer进行无感监听路由变化如何获取路由变化发生在哪个窗口呢?
50浏览 • 1回复 待解决
HarmonyOS使用@Objectlink和 @watchs 如何只监听对象一个属性的变化
158浏览 • 1回复 待解决
HarmonyOS使用Web组件如何监听滚动位置
99浏览 • 1回复 待解决
HarmonyOS 关于某个类默认参数的传递问题
112浏览 • 1回复 待解决
HarmonyOS @Observed修饰的类属性变化没有引起子组件刷新
84浏览 • 1回复 待解决
如何设置父组件随子组件宽度变化
1543浏览 • 1回复 待解决
HarmonyOS TextInput 组件问题
102浏览 • 1回复 待解决
首先aboutToAppear()事件是放在build()事件之前执行的;其次,观察到代码中并没有对this.model这个对象做重新赋值,所以没有触发到onChangeModel事件。demo里面是触发NavigationBarButtonA中的onClick事件,触发NavigationBarButton中的onChangeModel事件。
在NavigationBarButton中onClick事件可做如下更改: