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
2024-08-09 11:30:09
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

首先aboutToAppear()事件是放在build()事件之前执行的;其次,观察到代码中并没有对this.model这个对象做重新赋值,所以没有触发到onChangeModel事件。demo里面是触发NavigationBarButtonA中的onClick事件,触发NavigationBarButton中的onChangeModel事件。

在NavigationBarButton中onClick事件可做如下更改:

.onClick(this.clickEvent ?? (() => { 
  if (this.clickEvent) { 
    // this.clickEvent; 
    console.log("11111") 
  } 
  else { 
    console.log("22222") 
  } 
}))
分享
微博
QQ
微信
回复
2024-08-09 17:40:00
相关问题
HarmonyOS数据库数据变化是否可以监听
216浏览 • 1回复 待解决
如何监听window大小的变化
181浏览 • 1回复 待解决
如何监听窗口大小的变化
1734浏览 • 1回复 待解决
HarmonyOS网络监听问题
62浏览 • 1回复 待解决
UIAbility中是否可以监听页面变化
1235浏览 • 1回复 待解决
如何监听数组内对象属性变化
1981浏览 • 1回复 待解决
HarmonyOS 键盘事件监听问题
121浏览 • 1回复 待解决
如何监听文件或文件目录的变化
1446浏览 • 1回复 待解决
如何监听Viewmodel里变量值的变化
1697浏览 • 1回复 待解决
ArkTS中如何监听状态变量的变化
374浏览 • 1回复 待解决
如何实现一个监听网络变化的方法
195浏览 • 1回复 待解决
如何监听输入法输入内容的变化
126浏览 • 1回复 待解决
HarmonyOS关于AXIOS动态传参数问题
71浏览 • 1回复 待解决
HarmonyOS使用Web组件如何监听滚动位置
129浏览 • 1回复 待解决
如何设置父组件随子组件宽度变化
1647浏览 • 1回复 待解决